Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 找到签名的边界_Matlab_Image Processing - Fatal编程技术网

Matlab 找到签名的边界

Matlab 找到签名的边界,matlab,image-processing,Matlab,Image Processing,我如何找到这个反转二值图像的边界? 由于签名中存在间隙,使用标准边界框算法将无法完全封装整个签名,因为检测边界框时,笔划中的间隙将被解释为单个区域,因此将在其中检测单个边界框。解决方法之一是简单地找到所有非零像素,并找到最小和最大行和列位置。你可以用它来帮助你做到这一点。这些最小值和最大值将对应于封装此签名的整个边界框的左上角和右下角 在我显示任何代码之前,我直接读取您上传的图像,但它是RGB图像。同样地,我将用将其转换为灰度,然后用阈值设置图像。签名图像周围还有一个不必要的白色边框,所以我将用

我如何找到这个反转二值图像的边界?

由于签名中存在间隙,使用标准边界框算法将无法完全封装整个签名,因为检测边界框时,笔划中的间隙将被解释为单个区域,因此将在其中检测单个边界框。解决方法之一是简单地找到所有非零像素,并找到最小和最大行和列位置。你可以用它来帮助你做到这一点。这些最小值和最大值将对应于封装此签名的整个边界框的左上角和右下角

在我显示任何代码之前,我直接读取您上传的图像,但它是RGB图像。同样地,我将用将其转换为灰度,然后用阈值设置图像。签名图像周围还有一个不必要的白色边框,所以我将用它来清除

不用多说,下面是代码:

%// Read in image and convert to binary
%// Also clear the borders
im = imread('http://oi59.tinypic.com/5fk9y0.jpg');
im_bw = imclearborder(im2bw(rgb2gray(im)));

%// Find those non-zero pixel locations
[rows, cols] = find(im_bw);
min_row = min(rows);
max_row = max(rows);
min_col = min(cols);
max_col = max(cols);

%// Now extract the bounding box
bb = im_bw(min_row:max_row, min_col:max_col);

%// Show the image
imshow(bb);
当您这样做时,bb应该包含签名绑定的图像,以便它完全适合图像。这是我在显示bb时得到的结果:


玩得开心

如果Matlab不是一个严格的要求,或者您希望轻松检查您的Matlab结果,或者其他任何人看不起Matlab,那么有一个功能强大的ImageMagick,它可以在所有平台上运行,具有Perl、Python、.NET、Ruby等的命令行和绑定

我增加了图像周围的边框以进行适当的测试,并运行了以下命令:

convert out.png -format "%@" info:
362x135+49+26
convert out.png -stroke red -strokewidth 1 -fill none -draw "rectangle 49,26 410,160" box.png
这告诉我,您搜索的边界框宽362像素,高135像素,它的左上角从背景的左上角向右偏移49像素,向下偏移26像素-所有这些都在一个简单的命令中完成

为了好玩,我可以使用以下命令将该框绘制为红色:

convert out.png -format "%@" info:
362x135+49+26
convert out.png -stroke red -strokewidth 1 -fill none -draw "rectangle 49,26 410,160" box.png
看起来是这样的:


只需查看matlabs工具即可处理二进制图像。您所说的“边界”是什么意思?边界框?极值像素?凸面外壳?@Staus哦,对不起,我是个新手,我是说包围盒看看区域道具。随便用谷歌搜索一下。签名的范围覆盖了整个图像。如果要提取边界框,则基本上会得到图像的尺寸。因此,如果你能简单地使用图像的尺寸来获得你的答案,我看不出这个问题的意义。@rayreng为什么我的结果是这样的?天哪,很抱歉打扰你,这是我的论文,我被困在这里了,我想在使用不变矩之前使用这个签名。+1因为不能对图像处理说不哈哈,那是。。很高兴听到@里基欣德拉呃。。。好啊刚才发生了什么事?哈哈,你在和自己谈话吗?顺便说一句,不客气!谢谢马克:我真的很喜欢读你的答案。imageMagick是如此强大@谢谢你,雷。同样,我也喜欢你在图像处理方面的方法和见解。