-1

我有一个包含硬币图像的图像。硬币的形状可能是矩形、正方形、圆形、椭圆形等。我想在硬币上画一个矩形,然后将硬币从背景中分割出来。我不能给出矩形的 x 或 y 值,因为硬币可能在图像的任何地方。有谁知道如何做到这一点?

4

2 回答 2

1

我在下面的回答假设您已经识别出硬币并且您有一个可以使用的干净图像(二进制会很好)。

coin=load('penny.mat'); %#load matlab's stock image
img=zeros(256,256);
img(65:192,65:192)=coin.P;%# this is an approximation to the sort of image that I think you have

在此处输入图像描述

现在我们需要图像的范围来知道边界矩形的大小。由于数组在有图像的地方是非零的,而在其他地方是零的,下面给出了边的长度。

sideX=sum(sum(img,1)>0);
sideY=sum(sum(img,2)>0);

使用 找到图像的质心kmeans

[indX,indY]=ind2sub(size(img),find(img(:)>0));
[~,centroid]=kmeans([indX,indY],1);

现在最后将矩形覆盖在图像顶部。

imagesc(img);colormap(gray);hold on
rectangle('Position',([centroid,sideX,sideY]-[sideX,sideY,0,0]/2),'EdgeColor','w');hold off

结果:

在此处输入图像描述

如果您有一个嘈杂的图像(即,它在图像之外不是统一为零,那么您必须设置一个阈值才能找到边界框)

于 2011-04-07T17:05:14.050 回答
0

首先阅读 MathWorks关于模式识别的建议。解决问题的具体方式取决于很多事情,例如

  • 除了硬币,图片中还有什么?

  • 所有硬币的颜色都是相同的还是不同的?

  • 您是否有一组带有已识别硬币位置的图像训练集?

于 2011-04-07T15:34:15.607 回答