2013-12-09 127 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