3

假設我有一個灰度圖像。考慮每個像素周圍的圓形鄰域窗口。我需要獲取每個像素周圍的圓形鄰域的顏色直方圖。圓周鄰域操作:matlab顏色直方圖

如何在MatLab中有效實現此問題的循環鄰域操作?

+1

你有什麼試過的?你能向我們展示一些簡單的僞代碼,進一步解釋你想要什麼,因爲你的問題不清楚。你想爲每個像素/鄰域創建一個直方圖嗎?你想從每個鄰域的平均值創建一個直方圖嗎? – slayton

+0

你想要一個直方圖的鄰域每個像素或直方圖在所有像素的鄰域? – Bitwise

+0

我需要創建一個圓形鄰域的直方圖。 – user570593

回答

2

我不想給你一切,但我認爲這應該會幫助你很多。

那麼你可以做的人的圈子做這樣的事情

h = fspecial('disk',rad); 
h = h>0; 

然後你可以在一個更大的矩陣任何地方做這樣的事情

h2 = zeros(N,M); 
h2(c_offset-rad:c_offset+rad,r_offset-rad:r_offset+rad) = h; 

現在你有一個矩陣大小相同(col/row size)作爲圖像。您可以使用此作爲參考表,從矩陣中獲取數據,多以同樣的方式,你可以說

r = rand(10); 
d = r(r>0.5); 

編輯返回僅在0.5以上的值:

您還需要在一些地方玩弄數據類型以使MATLAB開心。例如,h2需要是邏輯的,才能將其用作另一個矩陣的參考表。如果沒有合適的類型,hist也無法工作。

+0

謝謝你的答覆。如果我想爲特定的圓圈獲取直方圖,我認爲這很好。但我實際需要的是:在每個像素周圍,我定義一個圓並試圖從中獲取直方圖。在這種情況下,我想知道這種方法是否有效。 – user570593

+0

你將不得不循環所有的像素(所有的偏移量),並迭代應用這種方法。特別是如果你想要一堆不同的直方圖。考慮即使是一個過濾器也使用嵌套for循環。 如果你想訪問N個像素,你將不得不使用O(N)算法。 – Bill

+0

謝謝你的回覆。我認爲這不會很有效率。我正在考慮任何基於矩陣相關/卷積的方法.. – user570593