關於用"K-means演算法"讓圖片分群... |
尚未結案
|
kulala
一般會員 發表:3 回覆:6 積分:1 註冊:2004-04-25 發送簡訊給我 |
|
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
我要把一張圖片切成 n 個區塊分成 k 類,
先從 n 個區塊中隨機取 k 個當做類別的中心;
再計算每個區塊n與每個k的距離;把n依序分入與它最接近的k類別中...
你說的就是K-mean法吧
你既然已經算出n 和 k 那針對每一個n和K算距離阿 假設n=100 k=3
算出n[1] 與 k[1]的距離 d(1,1)
n[1] 與 k[2]的距離 d(1,2)
n[1] 與 k[3]的距離 d(1,3)
然後假如d(1,1)最小 表示n[1]屬於第1群 如此針對每個n去做計算即可得知每個n屬於哪一群 通常Kmean法還要算很多遍(因為你一開始選k是隨機的不準)
接下來你把每個群中的n平均 把這個平均值當成k
然後重複計算之前的步驟,基本上算越多次應該分的越好
|
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
|
kulala
一般會員 發表:3 回覆:6 積分:1 註冊:2004-04-25 發送簡訊給我 |
|
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
特徵是我亂舉的啦,就是你每一個區塊代表的值阿,至於怎麼取是看你囉
我打個比方
如果你拿顏色當特徵的話.可能是n[1]這個區塊的每一點的顏色拿出來計算
R平均值=111 G平均值=222 B平均值=250
那這三個值就可以代表這個區塊...n[1]={111,222,250} 當然這種取法是滿爛的,我只是說明你要找出一組值(或一個值)能代表這一個區塊的..當2個n的值越接近表示他們越像,也表示他們越應該被分在同一群..不知這樣你了解嗎?
還有這部分已經跟K-mean法沒什麼關係了,不要搞混了喔 如果你照顏色來取特徵表示顏色越近的會被分在同一群
所以是看你分群的目的是什麼來取特徵阿.. 發表人 - bass15 於 2004/08/03 00:25:31
|
kulala
一般會員 發表:3 回覆:6 積分:1 註冊:2004-04-25 發送簡訊給我 |
嗯 我已將距離求出,可是找出最小距離這有些疑問不知道要怎麼改.. 我現在把圖分成四塊.分別是區塊0.1.2.3
要比較(區塊2-區塊1)的距離和(區塊2-區塊0)的距離何者較近
(區塊3-區塊1)的距離和(區塊3-區塊0)的距離何者較近
距離我是取pixel值 也就是要看和那一塊顏色較接近
:印出的結果跟理想中的狀態不一樣..
我是想把算出的第一個距離先當最小值來比較
可是不知道要怎寫才好 int result=0;
result=result+abs(X-Y); //距離
min=result;
for(int count=0;count<2;count )
{
if(result
|
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
|
kulala
一般會員 發表:3 回覆:6 積分:1 註冊:2004-04-25 發送簡訊給我 |
不好意思
我是想把相減的結果存在一個陣列裡
result=result+(X-Y)//假設X是區塊2的pixel值 Y是區塊0的
result就是兩區塊間的距離
我想將所有的結果都存在陣列中,比如說是arry[m]=result
但是我不知道將所有的結果都存在一起要如果比大小來分群,比如說切成10*10個區塊,在同一陣列中能比較arry[0]~arry[9]的最小值,arry[10]~arry[19]的最小值.....最後比出10個最小值嗎?
照您的寫法,如果是分成20*20個區塊,那是如何寫法?
我還是新手不知道那種寫法比較好,謝謝指教
|
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |