RGB rang maydoniga aylantirish orqali tasvirni qayta ishlash. 2D vektorga aylantirish uchun uni birinchi o'q bo'ylab o'zgartiring, ya'ni agar tasvir (100,100,3) (kenglik, balandlik, kanallar) shaklida bo'lsa, u (10000,3) ga aylanadi. Keyin, uni float ma'lumotlar turiga aylantiring.
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
twoDimage = img.reshape((-1,3))
twoDimage = np.float32(twoDimage)
K-Means algoritmi piksellarni to'plashi kerak bo'lgan mezonlarni aniqlang."K" o'zgaruvchisi pikselga tegishli bo'lishi mumkin bo'lgan guruhlar/guruhlar sonini belgilaydi (segmentatsiya darajasini oshirish uchun siz bu qiymatni oshirishingiz mumkin).
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 2
attempts=10
IV. K-Means algoritmini qo'llang
K o'zgaruvchisi tasodifiy ravishda K turli klasterlarini ishga tushiradi va "center" o'zgaruvchisi bu klasterlarning markazini aniqlaydi. Bu markazlardan har bir nuqtaning masofasi hisoblab chiqiladi va keyin ular klasterlardan biriga tayinlanadi. Keyin ular " label variable" qiymatiga ko'ra turli segmentlarga bo'linadi.
ret,label,center=cv2.kmeans(twoDimage,K,None,criteria,attempts,cv2.KMEANS_PP_CENTERS)
center = np.uint8(center)
res = center[label.flatten()]
result_image = res.reshape((img.shape))
Natija:
K-Means natijasi.
Foydalanilgan adabiyotlar. Image segmentation in OpenCV and Python. D.R.Xasanov,M.R.Tojiyev, O.D.Primqulov. Journal Academica Vol.10,Issue 12,December 2020. India
Gonzalez Rafael C., Richard Woods E. Digital Image Processing – 2 nd edition.2012