空間濾波的工作原理
濾波器的鄰域中心訪問輸入圖像中的每一個像素,並產生一個對應的信像素,新像素的坐標等於當前訪問的像素的坐標,新像素的值是預定義操作的運算結果。
以此類推。
一,圖像邊界處理方法
1 忽略邊界數據
2.拓展圖像(四周補上數據)
- 使用P值填充(如:P=0)
- 復制圖像邊界像素的值
- 鏡像圖像邊界像素的值
- 周期擴展
1. 忽略邊界數據
優點:濾波后的圖像中所有像素點都能由整個模版處理
缺點:處理后的圖像比原始圖像小,輸出的圖像尺寸=n-w+1
2. 拓展圖像(四周補上數據)
(1) 使用P=0來填充
(2) 復制圖像邊界
(3)鏡像擴展
(4)周期擴展
優點:與原圖的尺寸相等
缺點:若擴展方法不當,補在靠近圖像邊緣的部分會給處理后的圖像帶來不良影響,而且會隨着濾波器尺寸的增加而增大
matlab代碼示例
%%%%%%%%%%
% 邊界填充示例 %
%%%%%%%%%%
% 用matlab創建圖像
A=ones(512,512)*255;
A(1:256,1:256)=0;
A(257:512,257:512)=0;
figure;
imshow(uint8(A));title('原圖');
% 指定均值濾波器
f =ones(21,21);
% f =ones(21,21)/(21*21);
% 采用不同邊界填充策略濾波
%f為濾波器,相當於卷積核
B1= imfilter(A,f,0,'full');
B2= imfilter(A,f,'replicate','full');
B3= imfilter(A,f,'symmetric','full');
B4= imfilter(A,f,'circular','full');
% 顯示結果
figure;
subplot(231);imshow(uint8(A));title('原圖');
subplot(232);imshow(mat2gray(B1));title('填充0');
subplot(233);imshow(mat2gray(B2));title('復制邊界');
subplot(235);imshow(mat2gray(B3));title('鏡像擴展');
subplot(236);imshow(mat2gray(B4));title('周期擴展');
結果:
好像不太明顯。。。。不管了,可以把圖片尺寸變大。
[file, path] = uigetfile({'*.jpg'; '*.bmp'; '*.gif'; '*.png' }, '選擇圖片');
可選圖片。
matlab中的imfilter函數介紹:
二,均值濾波
平滑濾波器的輸出是包含在濾波器模版領域內的像素灰度的平均值,即均值濾波器
三,中值濾波
可以使用matlab中的medfilt2函數:B=medfilt2(A,[m n]);
這里引用一個函數:medfilt_filter
添加鏈接描述
function [img]=median_filter(image, m)
%----------------------------------------------
%中值濾波
%輸入:
%image:原圖
%m:模板的大小3*3的模板,m=3
%輸出:
%img:中值濾波處理后的圖像
%----------------------------------------------
n=m;
[height, width]=size(image);
x1=double(image);
x2=x1;
for i=1: height-n+1
for j=1:width-n+1
mb=x1(i:(i+n-1),j:(j+n-1));
mb=mb(:);
mm=median(mb);
x2( i+(n-1)/2,j+(n-1)/2)=mm;
end
end
img=uint8(x2);%matlab中uint16的范圍是0-65535,uint8的范圍是0-255。uint8(num)就是把num中大於255的強制賦值為255
end
[file, path] = uigetfile({'*.jpg'; '*.bmp'; '*.gif'; '*.png' }, '選擇圖片');
A = imread([path, file]);%取圖
B=imnoise(A,'salt & pepper',0.02);%椒鹽噪聲污染
D = rgb2gray(B);%灰度處理
C=median_filter(D,3);
subplot(2,2,1);imshow(A);title('原圖');
subplot(2,2,2);imshow(B);title('椒鹽噪聲污染圖');
subplot(2,2,3);imshow(D);title('椒鹽噪聲污染灰度圖');
subplot(2,2,4);imshow(C);title('中值濾波后');
運行結果:
四,統計排序濾波
matlab中的ordfilt2函數:B=ordfilt2(A,order,domain);
如:D = ordfilt2(B,5,ones(3,3));
matlab示例:
A = imread('cameraman.tif');
B = imnoise(A,'salt & pepper',0.05);
C = median_filter(B,[3 3]);
D = ordfilt2(B,5,ones(3,3));
figure;
subplot(221);imshow(A);title('原圖');
subplot(222);imshow(B);title('椒鹽噪聲污染圖');
subplot(223);imshow(C);title('中值濾波');
subplot(224);imshow(D);title('統計排序濾波');
運行結果:
reference:
李衛軍,肖宛昂,董肖莉,覃鴻老師《視覺信息處理及FPGA實現》課程等
銳化下次寫。
如有錯誤歡迎指出,轉載請注明出處