我希望裁剪此原始图像
bag http://oi65.tinypic.com/i19md1.jpg
到一个新图像,其中只包含最小白色像素的包(基本上将尺寸图像缩小到包边框)
cropbag http://oi67.tinypic.com/2wns6qr.jpg。
因此我决定先将其转换为二进制图像
binbag http://oi67.tinypic.com/16aoej8.jpg
但我不知道如何找到袋角坐标[xmin ymin width height]以便与imcrop(I,rect)一起使用它们。
任何帮助都会很棒。
剧本:
clc;
close all;
url='http://oi65.tinypic.com/i19md1.jpg' ;
rgbImage = imread(url);
grayImage = rgb2gray(rgbImage);
binaryImage = grayImage < 250;
imshow(binaryImage);
答案 0 :(得分:2)
这是一项非常容易执行的任务。由于binaryImage
包含您要用于裁剪图像的蒙版,因此您可以通过分别找到非最小的列和行坐标来找到要裁剪的位置的左上角(xmin,ymin)
-zero在掩码中,然后找到宽度和高度,找到非零的右下角,然后减去宽度的两个x
坐标和高度的两个y
坐标。您需要为每个差异添加1以考虑自身距离(即,如果您的宽度为1像素宽,则宽度应为1,而不是0)。您可以使用find
来帮助您查找非零的行和列位置。但是,imcrop
要求x
坐标反映水平行为,而y
坐标则反映<{>}}返回的垂直行为行和列位置分别。这就是您拨打find
时必须翻转它们的原因:
find
现在可以继续裁剪图像:
[y,x] = find(binaryImage); %// Find row and column locations that are non-zero
%// Find top left corner
xmin = min(x(:));
ymin = min(y(:));
%// Find bottom right corner
xmax = max(x(:));
ymax = max(y(:));
%// Find width and height
width = xmax - xmin + 1;
height = ymax - ymin + 1;
我为你的裁剪图像得到了这个: