2011-04-07 82 views
-1

我有一個包含硬幣圖像的圖像。硬幣的形狀可以是長方形,正方形,圓形,橢圓形等。我想在硬幣上繪製一個矩形,並從背景中分割硬幣。我不能給出矩形的x或y值,因爲硬幣可能在圖像中的任何位置。有誰知道如何做到這一點?使用Matlab在對象上繪製矩形

+1

它是一個二進制圖像?即硬幣在其他地方和零的地方?還是可以轉換成一個? – abcd 2011-04-07 13:50:06

+0

@R。 M.原始的一個是彩色圖像,我也有該圖像的二進制版本。 – 2011-04-07 14:55:03

+0

當你說你想在硬幣上畫一個矩形時,這是否意味着你希望選擇一個包含硬幣的小區域,然後在這個較小的圖像上進行分割? – Ghaul 2011-04-07 17:05:52

回答

0

首先閱讀MathWorks advice on pattern recognition。具體如何解決問題取決於很多事情,例如

  • 除了硬幣,圖像還有什麼?

  • 所有的硬幣是相同的顏色還是不同的顏色?

  • 你是否有一組圖像與確定的硬幣位置?

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 

enter image description here

現在我們需要才能知道邊界矩形的大小圖像的範圍。由於在其他地方存在圖像和零點的情況下,數組不爲零,因此以下給出了邊的長度。

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 

結果:

enter image description here

如果你有一個嘈雜的圖像(即,它不是均勻零圖像之外,那麼你就必須設定一個閾值,以找到邊框)