matlab调和均值滤波_均值滤波和中值滤波的MATLAB实现
1. 均值濾波
先創(chuàng)建一個(gè) medfilter.m 文件,代碼如下:
function [output] = meansfilter(input, radius)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% input: 噪聲圖像
% r: 圖像塊半徑
%
% Auther: Gao Zheng jie
% Email: 3170601003@cuit.edu.cn
% Date: 2017-12-19
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[m n] = size(input); % 獲取圖像的行列維度,并分別賦給m和n
Output = zeros(m, n); % 定義m*n的零矩陣,用來(lái)存放去噪結(jié)果圖像
input_pad = padarray(input, [radius radius], 'symmetric'); %邊界延拓,使得位于圖像邊緣的像素點(diǎn)也能形成圖像塊。
% symmetric 對(duì)邊界區(qū)域進(jìn)行對(duì)稱(chēng)性重復(fù)(也叫鏡像鑲邊),拓展的大小為[r r],f為圖像塊半徑
%例如[2 3]表示垂直方向拓展2行,水平方向拓展3列
% 逐行、依次對(duì)圖像中的每個(gè)像素點(diǎn)進(jìn)行局部均值去噪處理
for i=1:m % 行
for j=1:n % 列
% 在延拓后的圖像中確定將要修補(bǔ)點(diǎn)的坐標(biāo)
x = i + radius;
y = j + radius;
% 確定當(dāng)前像素點(diǎn)的鄰域(或者說(shuō)當(dāng)前點(diǎn)所在的圖像塊)
neighbordhood = input_pad(x-radius:x+radius, y-radius:y+radius);
output(i,j) = median(neighbordhood(:)); % 先將整個(gè)圖像塊扁平化,然后取中值
end
end
創(chuàng)建文件 test_medfilter.m 代碼如下:
clc; %清除命令窗口的內(nèi)容
clf; %清除圖形
clear; %清除原有變量
colormap(gray); %設(shè)置色圖,色圖是一個(gè)m*3的矩陣,每一個(gè)位置的取值是0或1
img = imread('einstein.jpg');
input = imnoise(img, 'salt & pepper'); % 添加椒鹽噪聲,默認(rèn)噪聲密度0.05(噪聲密度是指包含噪聲值的圖像區(qū)域的百分比)
output = medfilter(input, 1); % 半徑為1,即取3*3的圖像塊
output = uint8(output);
%figure %創(chuàng)建新的圖形窗口
%colormap(gray) %設(shè)置色圖,色圖是一個(gè)m*3的矩陣,每一個(gè)位置的取值是0或1
clf %清除圖形
subplot(2,3,1),imagesc(img),xlabel('img'); % 原圖
subplot(2,3,2),imagesc(input),xlabel('input'); % 加了噪聲的圖像
subplot(2,3,3),imagesc(input-img),xlabel('real noise'); % 計(jì)算并顯示所加的噪聲
subplot(2,3,4),imagesc(output),xlabel('output'); % 處理后的圖像
subplot(2,3,5),imagesc(input-output),xlabel('residuals noise'); % 計(jì)算并顯示噪聲冗余圖像,對(duì)去噪結(jié)果進(jìn)行定性比較
將這兩個(gè)文件放在同一個(gè)文件夾下,然后在 matlab 中運(yùn)行 test_medfilter.m 即可。
2. 中值濾波
先創(chuàng)建一個(gè) meansfilter.m 文件,代碼如下:
function [output] = meansfilter(input, radius)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% input: 噪聲圖像
% r: 圖像塊半徑
%
% Auther: Gao Zheng jie
% Email: 3170601003@cuit.edu.cn
% Date: 2017-12-19
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[m n] = size(input); % 獲取圖像的行列維度,并分別賦給m和n
Output = zeros(m, n); % 定義m*n的零矩陣,用來(lái)存放去噪結(jié)果圖像
input_pad = padarray(input, [radius radius], 'symmetric'); %邊界延拓,使得位于圖像邊緣的像素點(diǎn)也能形成圖像塊。
% symmetric 對(duì)邊界區(qū)域進(jìn)行對(duì)稱(chēng)性重復(fù)(也叫鏡像鑲邊),拓展的大小為[r r],f為圖像塊半徑
%例如[2 3]表示垂直方向拓展2行,水平方向拓展3列
weight = (2*radius+1)^2; % 算術(shù)均值濾波中每一個(gè)像素點(diǎn)的權(quán)重
% 逐行、依次對(duì)圖像中的每個(gè)像素點(diǎn)進(jìn)行局部均值去噪處理
for i=1:m % 行
for j=1:n % 列
% 在延拓后的圖像中確定將要修補(bǔ)點(diǎn)的坐標(biāo)
x = i + radius;
y = j + radius;
% 確定當(dāng)前像素點(diǎn)的鄰域(或者說(shuō)當(dāng)前點(diǎn)所在的圖像塊)
neighbordhood = input_pad(x-radius:x+radius, y-radius:y+radius);
output(i,j) = sum(sum(neighbordhood))/weight;
end
end
創(chuàng)建文件 test_medfilter.m 代碼如下:
clc; %清除命令窗口的內(nèi)容
clf; %清除圖形
clear; %清除原有變量
colormap(gray); %設(shè)置色圖,色圖是一個(gè)m*3的矩陣,每一個(gè)位置的取值是0或1
img = imread('einstein.jpg');
input = imnoise(img, 'gaussian'); % 添加高斯噪聲,默認(rèn)均值為0,方差為0.01
output = meansfilter(input, 1); % 半徑為1,即取3*3的圖像塊
output = uint8(output);
%figure %創(chuàng)建新的圖形窗口
%colormap(gray) %設(shè)置色圖,色圖是一個(gè)m*3的矩陣,每一個(gè)位置的取值是0或1
clf %清除圖形
subplot(2,3,1),imagesc(img),xlabel('img'); % 原圖
subplot(2,3,2),imagesc(input),xlabel('input'); % 加了噪聲的圖像
subplot(2,3,3),imagesc(input-img),xlabel('real noise'); % 計(jì)算并顯示所加的噪聲
subplot(2,3,4),imagesc(output),xlabel('output'); % 處理后的圖像
subplot(2,3,5),imagesc(input-output),xlabel('residuals noise'); % 計(jì)算并顯示噪聲冗余圖像,對(duì)去噪結(jié)果進(jìn)行定性比較
將這兩個(gè)文件放在同一個(gè)文件夾下,然后在 matlab 中運(yùn)行 test_medfilter.m 即可。
附
該文章于2017年12月19日于CSDN上首次發(fā)表,2017年12月23日搬家至此!
總結(jié)
以上是生活随笔為你收集整理的matlab调和均值滤波_均值滤波和中值滤波的MATLAB实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 标准紧固件孔、螺栓孔、自攻螺钉孔、螺纹孔
- 下一篇: VGG16网络结构复现(Pytorch版