我正在尝试裁剪图像,但不是使用矩形(如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);
我如何使用这两件事来裁剪出四角形多边形形状的区域?
答案 0 :(得分:2)
首先,转换图像进行裁剪是个坏主意。当应用单应性时,它将导致由于插值引起的伪像改变ROI的内容。此外,如果有一天您希望转换为超过4分的ROI,则此方法不再适用。
其次,我对您的脚本进行了一些小的更改,如下所示:
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 :(得分:1)
在MATLAB中尝试“impoly”函数