Matlab圖像處理—邊界填充,均值濾波,中值濾波,統計排序濾波


空間濾波的工作原理

濾波器的鄰域中心訪問輸入圖像中的每一個像素,並產生一個對應的信像素,新像素的坐標等於當前訪問的像素的坐標,新像素的值是預定義操作的運算結果。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
以此類推。

一,圖像邊界處理方法

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實現》課程等

銳化下次寫。
如有錯誤歡迎指出,轉載請注明出處


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM