Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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_Plot_Image Segmentation - Fatal编程技术网

使用Matlab在对象上绘制矩形

使用Matlab在对象上绘制矩形,matlab,image-processing,plot,image-segmentation,Matlab,Image Processing,Plot,Image Segmentation,我有一个包含硬币图像的图像。硬币的形状可以是长方形、正方形、圆形、椭圆形等。我想在硬币上画一个长方形,并从背景中分割硬币。我不能给出矩形的x或y值,因为硬币可能在图像中的任何地方。有人知道怎么做吗?从阅读数学著作开始。你到底如何解决这个问题取决于很多事情,例如 除了硬币,图像中还有什么 所有的硬币是相同的颜色还是不同的颜色 您是否有一组带有识别硬币位置的图像训练集 我下面的回答假设您已经识别了硬币,并且您有一个干净的图像(二进制图像更好),可以使用 coin=load('penny.mat')

我有一个包含硬币图像的图像。硬币的形状可以是长方形、正方形、圆形、椭圆形等。我想在硬币上画一个长方形,并从背景中分割硬币。我不能给出矩形的x或y值,因为硬币可能在图像中的任何地方。有人知道怎么做吗?

从阅读数学著作开始。你到底如何解决这个问题取决于很多事情,例如

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

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

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


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

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
结果:


如果你有一个有噪声的图像(即,图像外部不是均匀的零,那么你必须设置一个阈值来找到边界框)

它是一个二值图像吗?i、 例如,硬币所在的位置为1,其他位置为0?或者可以转换成一个?@R.M.原始图像是一个彩色图像,我也有该图像的二进制版本。当你说你想在硬币上画一个矩形时,这是否意味着你想选择一个包含硬币的小区域,然后在这个较小的图像上进行分割?