在進行影像處理時,有時只需要對映像中的某個特定地區進行處理,而並不需要對整個映像進行處理。比如要對使用者選定的一個特定的一個地區作均值濾波或對比增強,MATLAB就可以只對特定的地區進行處理。
更多MATLAB影像處理視頻請點擊 http://study.163.com/course/courseMain.htm?courseId=1003594013
1.指定感興趣地區
MATLAB中對特定地區的處理是通過二值掩模來實現的。使用者選定一個地區後會產生一個與原圖大小相同的二值映像,選定的地區為白色,其餘部分為黑色。通過掩模映像就可實現對特定地區的選擇性處理。
MATLAB影像處理工具箱提供了3個函數用於產生二值掩模,從而選擇特定地區,下面分別介紹。
(1)roipoly:
roipoly函數用於選擇映像中的多邊形地區。roipoly函數返回二值映像BW,選中地區的像素值為1(白色),其餘部分值為0(黑色)。這個二值映像可以作為掩模,通過與原圖的運算選擇目標或背景。其文法格式如下:
BW=roipoly(I,c,r)
BW = roipoly(I)
BW = roipoly(x,y,I,xi,yi)
[BW,xi,yi] = roipoly(⋯)
[x,y,BW,xi,yi] = roipoly(⋯)
BW=roipoly(I,c,r)是用向量 c、r 指定多邊形各角點的 x、y 軸的座標。
BW=roipoly(I)是允許使用者互動選擇多邊形地區,選擇角點,用空格鍵和 Del 鍵撤銷選擇,按 Enter 鍵確認選擇。
BW=roipoly(x,y,I,xi,yi)用向量 x 和 y 建立非預設的座標系,然後在指定的座標系下選擇由向量 xi、yi 指定的多邊形地區。
[BW,xi,yi]=roipoly(⋯)互動選擇多邊形地區,並返回多邊形角點的座標。
[x,y,BW,xi,yi]=roipoly(⋯)互動選擇多邊形地區後,還返回多邊形頂點在指定為座標系 x,y下的座標。
例:
I=imread('eight.tif');
%matlab內建的素材圖,不需要指定路徑,在MATLAB的工作路徑下,C:\Program Files\MATLAB\R2014a\toolbox\images\imdata
c=[222 272 300 270 221 194];
r=[21 21 75 121 121 75];
BW=roipoly(I,c,r);
imshow(I),title('原圖');
figure,imshow(BW),title('選中的地區');
(2)roicolor
MATLAB 影像處理工具箱提供的 roicolor 函數可以對 RGB 映像和灰階映像實現按灰階或亮度值選擇地區,其文法格式為:
BW = roicolor(A,low,high)
BW = roicolor(A,v)
BW = roicolor(A,low,high)表示按指定的灰階範圍分割映像,返回二值掩模 BW,[low high]為所要選擇地區的灰階範圍,若灰階值在這個範圍,則返回1(白色),否則返回0(黑色)。如果 low 大於 high,則返回為空白矩陣。
BW=roicolor(A,v)是按向量 v 中指定的灰階值來選擇地區。
例:
I=imread('rice.png');
>> %matlab內建的素材圖,不需要指定路徑,在MATLAB的工作路徑下,C:\Program Files\MATLAB\R2014a\toolbox\images\imdata
>> BW=roicolor(I,128,255);
>> %映像I的灰階值在[128 255]的範圍內返回1(即白色),不在[128 255]範圍內,返回0(即黑色);
>> figure,imshow(I),title('原圖');
>> figure,imshow(BW),title('選擇的地區');
(3)poly2mask
該函數可以轉化指定的多邊形地區為二值掩模。語句格式為
BW = poly2mask(x,y,m,n)
x 和 y 表示兩個向量,指定一個多邊形地區,BW 的大小為 m×n,在 BW 中指定地區內的像素為 1(白色),指定地區外的像素為 0(黑色)。如果 x 和 y 指定的地區不封閉,則 poly2mask 自動封閉這個多邊形。
例:
x = [63 186 54 190 63];
y = [60 60 209 204 60];
bw = poly2mask(x,y,256,256);
imshow(bw)
hold on
plot(x,y,'b','LineWidth',2)
2. 特定地區濾波
MATLAB 影像處理工具箱中提供了一個地區濾波函數 roifilt2,其文法格式為:
J = roifilt2(h,I,BW)
J = roifilt2(I,BW,fun)
J = roifilt2(I,BW,fun,P1,P2,⋯)
J = roifilt2(h,I,BW)使用濾波器 h 對映像 I 中用二值掩模 BW 選中的地區進行濾波。
J=roifilt2(I,BW,fun)和 J=roifilt2(I,BW,fun,P1,P2,⋯)對映像 I 中用二值掩模 BW 選中的地區作函數運算 fun,其中 fun 是描述函數運算的字串,參數為 p1、P2、⋯⋯返回映像 J 在選中地區的像素為映像 I 經 fun 運算的結果,其餘部分的像素值為 I 的原始值。
例:
I = imread('eight.tif');
c = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
BW = roipoly(I,c,r);%指定濾波地區為 c 和 r 確定的多邊形
h = fspecial('unsharp');%指定濾波運算元為 unsharp
J = roifilt2(h,I,BW);
figure,imshow(I),title('原圖');
>> figure,imshow(BW),title('濾波的地區');
>> figure,imshow(J),title('對選定地區濾波後的輸出');
3.特定地區填充
MATLAB 影像處理工具箱中提供了函數 roifill 用於對特定地區的填充,其文法格式為:
J = roifill(I,c,r)
J = roifill(I)
J = roifill(I,BW)
[J,BW] = roifill(⋯)
J = roifill(x,y,I,xi,yi)
[x,y,J,BW,xi,yi] = roifill(⋯)
其中 J=roifill(I,c,r)填充由向量 c、r 指定的多邊形,c 和 r 分別為多邊形各頂點的 x、y 座標。它是通過求解邊界的拉普拉斯方程,利用多邊形邊界點的灰階平滑的插值得到多邊形內部的點。通常可以利用對指定地區的填充來“擦”掉映像中的小塊地區。
J=roifill(I)表示由使用者互動選取填充的地區。選擇多邊形的角點後,按 Enter 鍵表示結束,空格鍵或 Del 鍵表示取消一個選擇。
J=roifill(I,BW)用掩模映像 BW 選擇地區。
[J,BW]=roifill(⋯)在填充地區的同時還返回掩模映像 BW。
J=roifill(x,y,I,xi,yi)和[x,y,J,BW,xi,yi]=roifill(⋯)表示在指定的座標系 x?y 下填充由向量 xi和 yi 指定的多邊形地區。
例:
I=imread('eight.tif');
%matlab內建的素材圖,不需要指定路徑,在MATLAB的工作路徑下,C:\Program Files\MATLAB\R2014a\toolbox\images\imdata
c=[222 272 300 270 221 194];
r=[21 21 75 121 121 75];
J=roifill(I,c,r);
figure,imshow(I),title('原圖');
>> figure,imshow(J),title('填充後的圖');
更多MATLAB影像處理視頻請點擊 http://study.163.com/course/courseMain.htm?courseId=1003594013