2013-08-28 30 views
-1

我有一個灰色的水平圖像,並希望找到特定顏色(例如黑色)更密集的區域。由於這個問題是一個更大的項目的一部分,我需要用java編程,但我沒有找到一個合適的算法。如何在圖像中聚類相同的顏色

+1

如果您想要java答案,請添加一個java標記。圖像的格式是什麼?它在一個文件中?你知道如何在Java中讀取文件嗎?你有沒有試過編寫任何代碼?如果是這樣,什麼? – doctorlove

+1

如果你從圖像處理開始,我真的建議你開始在Matlab中編寫你的代碼,然後跳轉到另一種語言(在你的情況下是java) – karl71

+0

你想要一個更粗糙的圖像量化?或基於灰度的圖像分割?如果你想根據色彩相似性進行分割,你應該檢查出mean-shift分割。看到http://stackoverflow.com/questions/4831813/image-segmentation-using-mean-shift-explained – Shai

回答

1

您應該使用K-Means來查找圖像中的簇。例如你的數據集應該是 位置X,Y,Z和灰色值。

然後運行多個k值的算法。並使用BIC評分來查找最佳羣集配置。

+0

因爲我在這個領域很年輕,你能給我一個程序來做這個或者一個代碼示例嗎? – user2724554

1

我建議您使用Matlab爲了您的第一步圖像處理。我寫了一個簡單函數來生成一個僞隨機圖像,然後我只考慮一個值超過閾值的像素。剩下的像素將被設置爲零。這是代碼:

image=randi([0 255],10); %Used to generate a 10x10 image with pixel values between [0-255] 

[row,col]=size(image); % to calculate the size of the image; 
image_output=zeros([row,col]); %We make an empty image with the same size than the origial 

TH_value=100; %threshold value 

index=find(image>TH_value); %searching for all the pixels with value>TH_value 
n_idx=length(index); %number of pixels over TH_value 

%no we have to replace in our empty new matrix only those pixels that have a value over the TH_value 
for i=1:n_idx 
    [row, col, ~ ] = ind2sub(size(image), index(i)); %geting the coordinates for all values over TH_value 
    image_output(row,col)=image(row,col); %copying to the output matrix only the pixels over TH_value 
end 
image_output %in order to visualize the output image 

將上面的代碼粘貼到Matlab中以查看它是如何工作的。這很簡單,但可以作爲開始。不要生成隨機圖像(請參閱代碼的第一行),您應該使用「imread」函數導入自己的圖像。

相關問題