Image Matlab中的图像裁剪与变换

Image Matlab中的图像裁剪与变换,image,matlab,image-processing,crop,homography,Image,Matlab,Image Processing,Crop,Homography,我试图裁剪一幅图像,但不是像imcrop中那样的矩形,而是有四个角的多边形。我搜索了很多,发现我需要执行单应性来将裁剪的多边形重新生成矩形 因此,我使用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

我试图裁剪一幅图像,但不是像imcrop中那样的矩形,而是有四个角的多边形。我搜索了很多,发现我需要执行单应性来将裁剪的多边形重新生成矩形

因此,我使用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);

如何使用这两件事来裁剪出一个具有四个角的多边形形状的区域?

在MATLAB中尝试使用impully函数


请参阅

首先,变换图像进行裁剪是个坏主意。当应用单应性时,由于插值,它将导致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放在面具外面;如果您愿意,您可以进行不同的调整。

从这个问题判断,OP已经进行了不礼貌的尝试。@nkjt这不是不礼貌的功能。。首先参考上面给出的链接您是指上面OP代码中出现第一个语法示例h=impoly的链接?要仅裁剪区域,请参见示例:使用imfreehand,但基本思想与impoly相同。