2013-12-09 167 views
1

我試圖裁剪一個圖像,但不是用矩形(如imcrop()),而是使用具有四個角的多邊形。我搜索了很多,發現我需要執行單應性來將裁剪的多邊形重新調整爲矩形。在Matlab中裁剪和變換圖像

所以我用imcrop()選擇一個圖像中的多邊形:

img = imread('pout.tif'); 
imshow(img); 
h = impoly; 
position = wait(h); 
x1 = min(position(:, 1)); 
x2 = max(position(:, 1)); 
y1 = min(position(:, 2)); 
y2 = max(position(:, 2)); 
BW = createMask(h); 

我怎麼會用這兩樣東西裁剪出在四個角的多邊形的形狀的面積?

+0

只是裁剪區域,看例如:http://stackoverflow.com/questions/20130210/(使用'imfreehand',但基本的想法是相同的'impoly')。 – nkjt

回答

2

首先,這是一個壞主意,變換圖像進行裁剪。這將導致在應用單應性時由於插值而改變ROI的內容與工件。另外,如果有一天您想變成由4分以上定義的投資回報率,則此方法不適用於更長時間。

其次,我對您的腳本一些小的改動,這樣的:

img = imread('circuit.tif'); 
imshow(img); 
h = impoly; 
position = wait(h); 
boundbox = [min(position(:,1)), .... 
     min(position(:,2)), .... 
     max(position(:,1))-min(position(:,1)), .... 
     max(position(:,2))-min(position(:,2))]; 
BW = createMask(h); 
img = imcrop(uint8(BW).*img, boundbox); 
imshow(img) 

你幾乎沒有...只是掩蓋你想要的圖像的ROI和作物與ROI的邊界框。這裏它將0放在面具外面;如果你願意,你可以適應不同的方式

1

試試「impoly」在MATLAB

功能是指http://www.mathworks.in/help/images/ref/impoly.html

+0

從問題來看,OP已經嘗試過'impoly'。 – nkjt

+0

@nkjt這是不可能的功能..首先參考上面給出的鏈接 –

+0

您的意思是第一個語法示例'h = impoly'出現在上面的OP代碼中的鏈接? – nkjt