簡單聚類實驗

2021-09-19 16:46:21 字數 2958 閱讀 7885

今天又試驗了:鄰誤差<=4進行聚類。以前覺得比較相鄰兩個畫素的誤差就可以聚類,實測輸出結果卻是那麼差勁。原來相鄰畫素基本都是相似的,對漸變過度的邊緣難以消化。37萬畫素聚類用了0.3秒,統計並生成9張面積最大的聚類則用了約0.2秒

將來有空再改善一下。假如不比相鄰畫素,比較相近的一小片區域效果肯定更好吧。

//由於漸變相鄰導致的誤判,需要增加判斷距離,增加聚類判斷條件

bitmapop = objimage.getpeekimage();

int 容差值;  //兩個畫素之間誤差值,  // msgbox("??");

if (text_資訊框.text == "") 容差值 = 12; else 容差值 = int.parse(text_資訊框.text);

mytimer.start();

stackstackid = new stack();  //堆疊集合的point類

timermark.start();

unsafe

//for1

ptr += ioffset;      //每行讀取到最後「有用」資料時,跳過未使用空間xx

}//for2 

rd("\r" + timermark.getseconds().tostring() + "完成" + index + "個rgb物件建立\r");

//piexout[0, 2].setid(ref 物件id[0, 0]);  //重新繫結

//物件id[0, 0] = 5;

timermark.start();

for (int y = 0; y < bmpheight - 1; y++)

else

//取小id 

}if (兩點相似度(piex[x, y], piex[x, y + 1]) <= 容差值)//上與下同色

}//for1 w

} //for2  h

timermark.start();

for (int y = bmpheight - 1; y > 0; y--)

else

//取小id 

if (兩點相似度(piex[x, y], piex[x, y - 1]) <= 容差值)//上與下同色

else

}}//for1

}//for2

rd("\r" + timermark.getseconds().tostring() + "完成右下角比較\r");

timermark.start();

idictionarydic = new dictionary();//建立每幅圖對應的 字典物件 ,儲存影象的屬性值 

idictionarydicsort = new dictionary();//建立每幅圖對應的 字典物件 ,儲存影象的屬性值 

//統計每個id 出現的次數 

//foreach (rgbclassref  rgb in piexout) //遍歷id號,比兩個for慢                     else //統計每個id 出現的次數 

//}//統計每個id 出現的次數 

for (int y = 0; y < bmpheight; y++)

else //統計每個id 出現的次數 

//if (piexout[x, y].id == arr[0])//}

}rd("\r" + timermark.getseconds().tostring() + "完成排序比較\r");

timermark.start();

//統計id重複最大的畫素,9個id就退出 

while (true)

}dic.remove(maxkey);

dicsort.add(maxkey, maxc);

}rd(timermark.getseconds().tostring() + ",9次迴圈字典每個id 出現的次數統計工作" + dic.count.tostring() + "\r");

}else

ptr += 3;

}ptr += ioffset;       //每行讀取到最後「有用」資料時,跳過未使用空間xx

}wjsb2.unlockbits(bmpdata2);

if (imgcount == 0) //

else if (imgcount == 1)

else if (imgcount == 2)

else if (imgcount == 3)

else if (imgcount == 4)

else if (imgcount == 5)

else if (imgcount == 6)

else if (imgcount == 7)

else if (imgcount == 8)

imgcount++;

}//每個輸出

rd("\r" + timermark.getseconds().tostring() + "秒輸出工作\r");

// rd(timermark.getseconds().tostring() + "輸出工作\r");

//   msgbox(piex[x, y].id);

// piex[x, y].color = color.fromargb(0,0, 0); 

// msgbox(rgb1.r + "," + rgb1.g + "," + rgb1.b); msgbox(rgb2.r + "," + rgb2.g + "," + rgb2.b);

bitmapop.unlockbits(srcdata);

}//unsafe  

pboxa.image = bitmapop;// fitpicturebox(bitmapop, pboxa);

text_timer.text = mytimer.getseconds().tostring();

資料聚類的簡單應用

資料聚類的簡單應用 資料聚類data 1.聚類時常被用於資料量很大 data intensive 的應用中。2.聚類是無監督學習 unsupervised learning 的乙個例子。無監督學習演算法並不利用帶有正確答案的樣本資料 進行 訓練 它們的目的是要在一組資料中找尋某種結構,而這些資料本身...

聚類之層次聚類 基於劃分的聚類(

目錄 一層次聚類 層次聚類的原理及分類 層次聚類的流程 層次聚類的優缺點 二劃分聚類法k means kmeans演算法的原理 k均值的優缺點及分類 k means與dbscan的區別 k means注意問題 三基於密度的聚類 dbscan的概念 簇的生成原理及過程 根據資料點的密度分為三類點 db...

k means聚類,密度聚類,層次聚類優缺點

k means 優點 1,簡單,易於理解和實現 2,時間複雜度低 缺點 1,需要對均值給出定義,2,需要指定要聚類的數目 3,一些過大的異常值會帶來很大影響 4,演算法對初始選值敏感 5,適合球形聚類 層次聚類 優點 1,距離和規則的相似度容易定義,限制少 2,不需要預先制定聚類數 3,可以發現類的...