本文鏈接:https://blog.csdn.net/Pxzly1117/article/details/79201772
程序:
I=imread('13.jpg');%讀入圖像
imshow(I);
h=imnoise(I,'salt & pepper');%為I圖片疊加椒鹽噪聲噪聲
figure;imshow(h);
w=[1 2 1;2 4 2;1 2 1]/16;%高斯模板
I5=imfilter(h,w,'corr','replicate');%高斯平滑
figure;imshow(I5);
w=[1 1 1;1 1 1;1 1 1]/9;%平均模板
I7=imfilter(h,w,'corr','replicate');%平均平滑
figure;imshow(I7);
I9=medfilt2(h,[3,3]);%中值濾波
figure;imshow(I9);
出現錯誤:
問題:
中值濾波medfilt2,用法是B = medfilt2(A, [m n]),輸入圖像A應是二維矩陣,程序中輸入圖像h是由imread得到的I加上噪聲得到的,而imread讀到的圖像I通常是3維RGB圖,是三維矩陣,因此才出現問題,顯示A應該為二維的。
解決方法:
先用rgb2gray(I)將h先將I圖像轉換為灰度矩陣圖像,再用medfilt2。
程序后段改為:
j=rgb2gray(I);
I9=medfilt2(j,[3,3]);
figure;imshow(I9);
附:中值濾波定義
medfilt2需要輸入兩個參數,第一個是圖像A,第二個參數需要輸入一個長度是二的向量,[m n],指定模版的大小,m行n列。