2011-04-01 72 views
2

我正在嘗試對我正在處理的程序的圖像執行特徵提取,目前我可以計算這個區域,但是在周邊有問題。如何計算java中二進制圖像的周長?

我怎麼能實現這個爲了返回一個使用java的邊界的數值?

謝謝,

湯姆

 Raster raster = source.getRaster(); 
    int perimeter = 0; 
    for(int y = 0; y<source.getHeight(); y++) 
     for(int x = 0; x< source.getWidth(); x++) 
     { 
      if(raster.getSample(x, y, 0) == 1 && ((raster.getSample(x+1, y, 0)==0) || (raster.getSample(x-1, y, 0)==0) || (raster.getSample(x, y+1, 0)==0) || (raster.getSample(x, y-1, 0)==0))) 
       perimeter ++; 
     } 
    return perimeter; 

回答

1

可以使用類似於Matlab的(描述here

像素是周邊的一部分,如果它 是非零和一種方法它連接到 至少一個零值像素

您可以爲像素定義不同的鄰域(例如,三個周圍的網格,或剛剛上/下/左/右)。一旦你過濾了圖像,計算出來的像素給你一個值。

+0

編輯上面顯示我已經做了一個向上的左下方 – Tom 2011-04-01 13:59:24

+0

「連接到至少一個零值像素」 - 您的示例代碼似乎並沒有做到這一點。我添加了一個例子 – 2011-04-01 14:10:16

+0

這給了我一個巨大的數字,比實際值更多的方式,而我以前的代碼似乎工作正常 – Tom 2011-04-01 14:27:00

1

我沒有這方面的例子,可能需要一段時間,但你可以看看marching squares -algorithm。

編輯:here是Tom Gibara用Java編寫的Marching Squares的實現。