在進行影象處理時,有時只需要對影象中的某個特定區域進行處理,而並不需要對整個影象進行處理。比如要對使用者選定的乙個特定的乙個區域作均值濾波或對比度增強,matlab就可以只對特定的區域進行處理。
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('選中的區域');
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('選擇的區域');
該函式可以轉化指定的多邊形區域為二值掩模。語句格式為
bw = poly2mask(x,y,m,n)
x 和 y 表示兩個向量,指定乙個多邊形區域,bw 的大小為 m×n,在 bw 中指定區域內的畫素為 1(白色),指定區域外的畫素為 0(黑色)。如果 x 和 y 指定的區域不封閉,則 poly2mask 自動封閉這個多邊形。
例:x = [63 186 54 190 63];
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之選取特定區域的座標點
比如選取乙個不規則四邊形內的點 確定四個點的座標,declaim四邊形 2.定義座標區域內的點 xvector 0 0.05 2.4 yvector 2.4 0.05 0 x,y meshgrid xvector,yvector obtain all coordinates xx reshape x...
Q6 特定分治策略
6.5.7選第k小元素 特定分治策略 在給出的乙個陣列s中,找到第k小的數。以s中的某個元素m作為劃分標準,將s劃分為兩個子陣列s1和s2,把這個陣列中比m小的都放入s1的陣列中,陣列s1的元素個數是 s1 個 把這個陣列中比m 大的都放入s2的陣列中,陣列s2的元素個數是 s2 個。若k若k s1...
OpenCV學習 子區域處理
pragma comment lib,cxcore.lib pragma comment lib,cv.lib pragma comment lib,highgui.lib include include include int main int argc,char argv 既然我們有了很方便的r...