線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2401
推到 Plurk!
推到 Facebook!

關於用"K-means演算法"讓圖片分群...

尚未結案
kulala
一般會員


發表:3
回覆:6
積分:1
註冊:2004-04-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-31 16:31:40 IP:210.201.xxx.xxx 未訂閱
我要把一張圖片切成 n 個區塊分成 k 類, 先從 n 個區塊中隨機取 k 個當做類別的中心; 再計算每個區塊n與每個k的距離;把n依序分入與它最接近的k類別中... 目前n和k都已取出,還差分群;但對於"K-means演算法"不是很了解, 請各位指導一下,謝謝‧感激不盡...
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-02 11:38:24 IP:219.84.xxx.xxx 未訂閱
我要把一張圖片切成 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-02 11:56:36 IP:219.84.xxx.xxx 未訂閱
再補充一下 通常距離是用阿基米得公式算的 例如 n[1]有3個特徵 (111,333,555) k[1]有3個特徵 (222,444,666) 那n[1], k[1]的距離是 ( (111-222)的平方 (333-444)的平方 (555-666)的平方 ) 整個開更號 不太會打符號 希望這樣你能看的懂
kulala
一般會員


發表:3
回覆:6
積分:1
註冊:2004-04-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-02 23:02:49 IP:210.201.xxx.xxx 未訂閱
ㄜ...不好意思 請問"特徵"是什麼意思?? 可以看成是每個區塊ㄉpixel值嗎?? 謝謝!!!
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-02 23:57:49 IP:61.59.xxx.xxx 未訂閱
特徵是我亂舉的啦,就是你每一個區塊代表的值阿,至於怎麼取是看你囉 我打個比方 如果你拿顏色當特徵的話.可能是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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-03 14:55:38 IP:220.138.xxx.xxx 未訂閱
嗯 我已將距離求出,可是找出最小距離這有些疑問不知道要怎麼改..    我現在把圖分成四塊.分別是區塊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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-03 16:49:00 IP:219.84.xxx.xxx 未訂閱
看不太懂你的程式耶.. 假設你的區塊0和區塊1是X[0],X[1]         區塊2和區塊3是X[2],X[3]   區塊3和區塊4的群組是G[2],G[3]
 
for(int i=2;i<4)
{
  if( X[i]-X[0] < X[i]-X[1] )
    G[i]=0;
  else
    G[i]=1;
}
如此就可以算出他們區塊3和4是屬於哪一群吧...當然G[0]=0..G[1]=1..
kulala
一般會員


發表:3
回覆:6
積分:1
註冊:2004-04-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-04 22:31:01 IP:218.168.xxx.xxx 未訂閱
不好意思 我是想把相減的結果存在一個陣列裡 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-08-05 10:52:58 IP:61.66.xxx.xxx 未訂閱
int x=10;
int y=10;
 
for(int i=0;i
10*10的code..
min[0]~min[9]是10個最小值...
如果要20*20那修改x,y的值吧..        發表人 - bass15 於 2004/08/05  11:01:16
        
系統時間:2024-05-19 12:43:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!