2016-12-07 52 views
0

我有一個圖像上包裝周邊探測如下圈圖像

Circle packing

我已經創建了一個MATLAB代碼,將檢測在圓周上的像素,並創建一個整數掩模,所以我可以在它導入一個C++代碼。這是主要算法的一小部分。 (我用imread和圖像存儲在一個NXN陣列

for i=1:nx 
    for j=1:ny 
      if (wholeGeom(j,i) == 255) 
       B(j,i) = 1; 
      elseif ((wholeGeom(j,i) == 0)&& ... 
        ((i==1||i==nx) && j>1 && j<nx)&& ... 
        (wholeGeom(j+1,i)==255 || ... 
         wholeGeom(j-1,i)==255)) 
        B(j,i) = 2; 
      elseif ((wholeGeom(j,i) == 0)&& ... 
        ((j==1||j==nx) && i>1 && i<nx)&& ... 
        (wholeGeom(j,i+1)==255 || ... 
         wholeGeom(j,i-1)==255)) 
        B(j,i) = 2; 
      elseif ((wholeGeom(j,i) == 0)&& ... 
        (i>1 && j>1 && i<nx && j<nx)&& ... 
        (wholeGeom(j+1,i)==255 || ... 
        wholeGeom(j-1,i)==255 ||... 
        wholeGeom(j,i+1)==255 ||... 
        wholeGeom(j,i-1)==255)) 
      else 
        B(j,i) = 0; 

這很適合我。我的輸出如下

BounceBack Nodes

我只是想知道如果有一個更有效的方法要做到這一點,特別是在matlab ....任何建議,將不勝感激

回答

0

確實,形態操作是你的朋友。Morphological operations是一個非常快速的工具來處理二進制圖像。您可以使用imdilate"dilate"圖像,即「加厚」圖像中的所有對象。

% Load image 
wholeGeom = rgb2gray(imread('https://i.stack.imgur.com/Jt4TC.png')); 

% Threshold to make image binary 
wholeGeom = wholeGeom > 128; 

% Dilate image, i.e. add 1 pixel to each side of an object 
borders = imdilate(wholeGeom, [0,1,0;1,1,1;0,1,0]); 

% Set borders to 2 and everything inside object to 1 
result = 2*borders - wholeGeom; 

結果(放大,使邊界更明顯):

result

+0

有趣的....感謝反饋.... –

0

一個更真實的方式來尋找任何形式的參數形狀的使用霍夫變換它採用投票機制找到任何圖像中參數化形狀的類型。在這種情況下,您可以使用:

%imfindcircles internally uses Hough Transforms 
centers = imfindcircles(img,radius) 
[centers,radii] = imfindcircles(img,radiusRange)