2012-12-08 101 views
1

我想提取圖像的某個區域,特別是它的三角形部分。我的圖像的尺寸爲444x256x3。下圖說明了我想提取哪一部分:在MATLAB中裁剪直角三角形圖像

enter image description here

我想以提取由紅色虛線(直角三角形)形成的三角形。

+1

你能解釋一下你的提取物直角三角形的意思。你想測量三角形的其他角度或邊長嗎?如果您使用'圖像'繪製三角形,那麼邊緣是否與軸線平行,或者是否是其他方向的三角形?如果可能,你可以上傳圖片嗎? – mythealias

+0

圖片鏈接:http://i103.photobucket.com/albums/m160/akz218/123-1.jpg –

+0

那麼這個三角形是如何定義的?你有角點?所有構成雙方的點?三角形中的所有點? –

回答

0

有這不錯的功能roipoly,你可以用它來從一組頂點創建遮罩:

BW = roipoly(I, c, r)返回由矢量cr描述的多邊形,其中指定列和指定的投資回報率每個頂點的行索引。 cr必須是相同的大小。

你有那麼到目前爲止是:

imglena = imread('lena.png'); 
imshow(imglena) 

siz = size(imglena); 
c = [1 1  siz(2)/2]; 
r = [1 siz(1) siz(1) ]; 
line([c c(1)],[r r(1)],'color','r','LineWidth',4); 

enter image description here

cr列和三角形的頂點的行。

前面提到的掩模,現在可以用於提取的原始圖像的感興趣區域:

mask = roipoly(imglena,c,r); 
imglena_cropped=bsxfun(@times, imglena, cast(mask,class(imglena))); 

或我寧願,使用普通的邏輯索引,而不是巨大矩陣乘法的方法:

mask = repmat(roipoly(imglena,c,r),[1 1 3]); 
imglena_cropped = 255/2*ones(size(imglena),class(imglena)); 
imglena_cropped(mask) = imglena(mask); 

這樣您還可以更輕鬆地控制生成的背景顏色;例如我將它設置爲灰色。

最後,你可以用修剪產生的圖像:

imglena_cropped = imglena_cropped(min(r):max(r),min(c):max(c),:); 

enter image description here