目錄
- 第二章 灰度變換與空間濾波(續)
- 直方圖處理與函數繪圖
- 生成直方圖
- 直方圖均衡
- 直方圖匹配
- 空間濾波
- 線性空間濾波
- 非線性空間濾波
- 圖像處理工具箱的標準濾波器
- 線性空間濾波器
- 非線性空間濾波器
- 直方圖處理與函數繪圖
第二章 灰度變換與空間濾波(續)
直方圖處理與函數繪圖
生成直方圖
應用函數 imhist
語法如下
h = imhist(f,b)
h為生成的直方圖,f為輸入圖像,b為"容器"的數目。
以下面這幅圖像的灰度級分布直方圖為例
運行如下代碼生成直方圖
>> bar(h,0)
>> f = imread('2-3-1.jpg');
>> imhist(f)
為了便于觀察,將灰度級分為十個級別,使用bar函數繪制條形圖
>> f = imread('2-3-1.jpg');
>> h = imhist(f,10);
>> bar(h,1);
直方圖均衡
觀察上面兩個直方圖的分布,灰度級主要集中在較暗區域。現在通過直方圖均衡來改變圖像的對比度。
運行代碼
>> f = imread('2-3-1.jpg');
>> g = histeq(f,256);
>> imshow(g)
>> imhist(g)
獲得均衡后的圖像
其灰度分布直方圖為
可以看到,灰度值的動態范圍增加了。
直方圖匹配
直方圖匹配應用histeq函數,可以用規定的函數映射圖像的灰度值。格式如下
g = histeq(f, hspec)
f為輸入圖像,hspec為一個規定的行向量。
同時還可以應用adapthisteq處理圖像,這個函數可以通過直方圖匹配方法逐個處理圖像的一部分,最后用雙線性內插的方法將其組合起來,從而消除人工引入的邊界。
>> f=imread('2-3-3.jpg');
>> imshow(f);
>> g3=adapthisteq(f,'NumTiles',[25 25],'ClipLimit',0.05);
>> figure,imshow(g3)
原始圖像
處理后的圖像
可以看到,圖像的細節變多了。
空間濾波
線性空間濾波
線性空間濾波的操作是將鄰域中的每個像素乘以相應的系數,然后求和,從而得到點(x,y)處的響應。
處理方式包括相關和卷積,其中卷積需要將模板旋轉180°,其余操作完全相同。關于像素的邊界處,有不同的填充方法,同時得到不同的結果。
在MATLAB中,處理線性空間卷積的函數是imfilter,格式如下
g = imfilter(f,w,filtering_mode,boundary_options,size_options)
其中后三個屬性設置了濾波模式,邊界選項和大小選項。
分別運行一下代碼
f = ones(512);
for i = 1:256for j = 1:256f(i,j)=0;end
end
for i = 257:512for j = 257:512f(i,j)=0;end
end>> gd=imfilter(f,w);
>> gr=imfilter(f,w,'replicate');
>> gs=imfilter(f,w,'symmetric');
>> gc = imfilter(f,w,'circular');
>> g8r = imfilter(im2uint8(f),w,'replicate');
生成一幅512×512的圖像,并進行線性操作,可得以下圖像。
非線性空間濾波
非線性空間濾波與線性空間濾波機理相同。而線性濾波基于計算乘積和,非線性空間濾波則進行非線性操作,例如,讓響應為最大像素值。
非線性操作的語法為
g = colfilt(f,[m n], 'sliding', fun)
其中f是輸入圖像,m和n是濾波器維數,sliding表明處理過程,fun是函數句柄。
填充邊界的問題可以用padarray函數來解決。
fp = padarray(f, [r c], method, direction)
其中,f為輸入圖像,fp為填充后的圖像,[r c]表示用于填充f的行和列數,method和direction代表了填充的方法和方向。
對以下圖像進行操作
>> f = imread('2-4-2.jpg');
>> g = colfilt(f,[5 5],'sliding',@mean);
>> g = uint8(g);
>> imshow(g);
處理結果如下
圖像處理工具箱的標準濾波器
線性空間濾波器
>> f= imread('2-4-3.jpg');
>> w4 = fspecial('laplacian',0);
>> w8 = [1 1 1;1 -8 1;1 1 1];
>> f = tofloat(f);
>> g4 = f - imfilter(f,w4,'replicate');
>> g8 = f - imfilter(f,w8,'replicate');
>> imshow(f);
>> figure,imshow(g4);
>> figure,imshow(g8);
原始圖像
g4
g8
非線性空間濾波器
>> f=imread('2-4-4.jpg');
>> fn = imnoise(f,'salt & pepper',0.2);
>> gm = medfilt2(fn);
>> gms = medfilt2(fn,'symmetric');
>> subplot(221),imshow(f)
>> subplot(222),imshow(fn)
>> subplot(223),imshow(gm)
>> subplot(224),imshow(gms)