[Python从零到壹] 六十一.图像识别及经典案例篇之基于纹理背景和聚类算法的图像分割
祝大家新年快樂(lè),闔家幸福,健康快樂(lè)!
歡迎大家來(lái)到“Python從零到壹”,在這里我將分享約200篇Python系列文章,帶大家一起去學(xué)習(xí)和玩耍,看看Python這個(gè)有趣的世界。所有文章都將結(jié)合案例、代碼和作者的經(jīng)驗(yàn)講解,真心想把自己近十年的編程經(jīng)驗(yàn)分享給大家,希望對(duì)您有所幫助,文章中不足之處也請(qǐng)海涵。Python系列整體框架包括基礎(chǔ)語(yǔ)法10篇、網(wǎng)絡(luò)爬蟲(chóng)30篇、可視化分析10篇、機(jī)器學(xué)習(xí)20篇、大數(shù)據(jù)分析20篇、圖像識(shí)別30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的關(guān)注、點(diǎn)贊和轉(zhuǎn)發(fā)就是對(duì)秀璋最大的支持,知識(shí)無(wú)價(jià)人有情,希望我們都能在人生路上開(kāi)心快樂(lè)、共同成長(zhǎng)。
該系列文章主要講解Python OpenCV圖像處理和圖像識(shí)別知識(shí),前期主要講解圖像處理基礎(chǔ)知識(shí)、OpenCV基礎(chǔ)用法、常用圖像繪制方法、圖像幾何變換等,中期講解圖像處理的各種運(yùn)算,包括圖像點(diǎn)運(yùn)算、形態(tài)學(xué)處理、圖像銳化、圖像增強(qiáng)、圖像平滑等,后期研究圖像識(shí)別、圖像分割、圖像分類(lèi)、圖像特效處理以及圖像處理相關(guān)應(yīng)用。
第一部分作者介紹了圖像處理基礎(chǔ)知識(shí),第二部分介紹了圖像運(yùn)算和圖像增強(qiáng),接下來(lái)第三部分我們將詳細(xì)講解圖像識(shí)別及圖像處理經(jīng)典案例,該部分屬于高階圖像處理知識(shí),能進(jìn)一步加深我們的理解和實(shí)踐能力。圖像分割是將圖像分成若干具有獨(dú)特性質(zhì)的區(qū)域并提取感興趣目標(biāo)的技術(shù)和過(guò)程,它是圖像處理和圖像分析的關(guān)鍵步驟。主要分為基于閾值的分割方法、基于區(qū)域的分割方法、基于邊緣的分割方法和基于特定理論的分割方法。上一篇文章引入了圖像分割知識(shí),這篇文章將詳細(xì)講解基于紋理背景的圖像分割和基于聚類(lèi)算法的圖像分割。希望文章對(duì)您有所幫助,如果有不足之處,還請(qǐng)海涵。
文章目錄
- 一.基于紋理背景的圖像分割
- 二.基于K-Means聚類(lèi)算法的區(qū)域分割
- 三.總結(jié)
下載地址:記得點(diǎn)贊喔 O(∩_∩)O
- https://github.com/eastmountyxz/Python-zero2one
- 開(kāi)源600多頁(yè)電子書(shū):https://github.com/eastmountyxz/HWCloudImageRecognition
前文賞析:(盡管該部分占大量篇幅,但我舍不得刪除,哈哈!)
第一部分 基礎(chǔ)語(yǔ)法
- [Python從零到壹] 一.為什么我們要學(xué)Python及基礎(chǔ)語(yǔ)法詳解
- [Python從零到壹] 二.語(yǔ)法基礎(chǔ)之條件語(yǔ)句、循環(huán)語(yǔ)句和函數(shù)
- [Python從零到壹] 三.語(yǔ)法基礎(chǔ)之文件操作、CSV文件讀寫(xiě)及面向?qū)ο?/li>
第二部分 網(wǎng)絡(luò)爬蟲(chóng)
- [Python從零到壹] 四.網(wǎng)絡(luò)爬蟲(chóng)之入門(mén)基礎(chǔ)及正則表達(dá)式抓取博客案例
- [Python從零到壹] 五.網(wǎng)絡(luò)爬蟲(chóng)之BeautifulSoup基礎(chǔ)語(yǔ)法萬(wàn)字詳解
- [Python從零到壹] 六.網(wǎng)絡(luò)爬蟲(chóng)之BeautifulSoup爬取豆瓣TOP250電影詳解
- [Python從零到壹] 七.網(wǎng)絡(luò)爬蟲(chóng)之Requests爬取豆瓣電影TOP250及CSV存儲(chǔ)
- [Python從零到壹] 八.數(shù)據(jù)庫(kù)之MySQL基礎(chǔ)知識(shí)及操作萬(wàn)字詳解
- [Python從零到壹] 九.網(wǎng)絡(luò)爬蟲(chóng)之Selenium基礎(chǔ)技術(shù)萬(wàn)字詳解(定位元素、常用方法、鍵盤(pán)鼠標(biāo)操作)
- [Python從零到壹] 十.網(wǎng)絡(luò)爬蟲(chóng)之Selenium爬取在線(xiàn)百科知識(shí)萬(wàn)字詳解(NLP語(yǔ)料構(gòu)造必備技能)
第三部分 數(shù)據(jù)分析和機(jī)器學(xué)習(xí)
- [Python從零到壹] 十一.數(shù)據(jù)分析之Numpy、Pandas、Matplotlib和Sklearn入門(mén)知識(shí)萬(wàn)字詳解(1)
- [Python從零到壹] 十二.機(jī)器學(xué)習(xí)之回歸分析萬(wàn)字總結(jié)全網(wǎng)首發(fā)(線(xiàn)性回歸、多項(xiàng)式回歸、邏輯回歸)
- [Python從零到壹] 十三.機(jī)器學(xué)習(xí)之聚類(lèi)分析萬(wàn)字總結(jié)全網(wǎng)首發(fā)(K-Means、BIRCH、層次聚類(lèi)、樹(shù)狀聚類(lèi))
- [Python從零到壹] 十四.機(jī)器學(xué)習(xí)之分類(lèi)算法三萬(wàn)字總結(jié)全網(wǎng)首發(fā)(決策樹(shù)、KNN、SVM、分類(lèi)算法對(duì)比)
- [Python從零到壹] 十五.文本挖掘之?dāng)?shù)據(jù)預(yù)處理、Jieba工具和文本聚類(lèi)萬(wàn)字詳解
- [Python從零到壹] 十六.文本挖掘之詞云熱點(diǎn)與LDA主題分布分析萬(wàn)字詳解
- [Python從零到壹] 十七.可視化分析之Matplotlib、Pandas、Echarts入門(mén)萬(wàn)字詳解
- [Python從零到壹] 十八.可視化分析之Basemap地圖包入門(mén)詳解
- [Python從零到壹] 十九.可視化分析之熱力圖和箱圖繪制及應(yīng)用詳解
- [Python從零到壹] 二十.可視化分析之Seaborn繪圖萬(wàn)字詳解
- [Python從零到壹] 二十一.可視化分析之Pyechart繪圖萬(wàn)字詳解
- [Python從零到壹] 二十二.可視化分析之OpenGL繪圖萬(wàn)字詳解
- [Python從零到壹] 二十三.十大機(jī)器學(xué)習(xí)算法之決策樹(shù)分類(lèi)分析詳解(1)
- [Python從零到壹] 二十四.十大機(jī)器學(xué)習(xí)算法之KMeans聚類(lèi)分析詳解(2)
- [Python從零到壹] 二十五.十大機(jī)器學(xué)習(xí)算法之KNN算法及圖像分類(lèi)詳解(3)
- [Python從零到壹] 二十六.十大機(jī)器學(xué)習(xí)算法之樸素貝葉斯算法及文本分類(lèi)詳解(4)
- [Python從零到壹] 二十七.十大機(jī)器學(xué)習(xí)算法之線(xiàn)性回歸算法分析詳解(5)
- [Python從零到壹] 二十八.十大機(jī)器學(xué)習(xí)算法之SVM算法分析詳解(6)
- [Python從零到壹] 二十九.十大機(jī)器學(xué)習(xí)算法之隨機(jī)森林算法分析詳解(7)
- [Python從零到壹] 三十.十大機(jī)器學(xué)習(xí)算法之邏輯回歸算法及惡意請(qǐng)求檢測(cè)應(yīng)用詳解(8)
- [Python從零到壹] 三十一.十大機(jī)器學(xué)習(xí)算法之Boosting和AdaBoost應(yīng)用詳解(9)
- [Python從零到壹] 三十二.十大機(jī)器學(xué)習(xí)算法之層次聚類(lèi)和樹(shù)狀圖聚類(lèi)應(yīng)用詳解(10)
第四部分 Python圖像處理基礎(chǔ)
- [Python從零到壹] 三十三.圖像處理基礎(chǔ)篇之什么是圖像處理和OpenCV配置
- [Python從零到壹] 三十四.OpenCV入門(mén)詳解——顯示讀取修改及保存圖像
- [Python從零到壹] 三十五.圖像處理基礎(chǔ)篇之OpenCV繪制各類(lèi)幾何圖形
- [Python從零到壹] 三十六.圖像處理基礎(chǔ)篇之圖像算術(shù)與邏輯運(yùn)算詳解
- [Python從零到壹] 三十七.圖像處理基礎(chǔ)篇之圖像融合處理和ROI區(qū)域繪制
- [Python從零到壹] 三十八.圖像處理基礎(chǔ)篇之圖像幾何變換(平移縮放旋轉(zhuǎn))
- [Python從零到壹] 三十九.圖像處理基礎(chǔ)篇之圖像幾何變換(鏡像仿射透視)
- [Python從零到壹] 四十.圖像處理基礎(chǔ)篇之圖像量化處理
- [Python從零到壹] 四十一.圖像處理基礎(chǔ)篇之圖像采樣處理
- [Python從零到壹] 四十二.圖像處理基礎(chǔ)篇之圖像金字塔向上取樣和向下取樣
第五部分 Python圖像運(yùn)算和圖像增強(qiáng)
- [Python從零到壹] 四十三.圖像增強(qiáng)及運(yùn)算篇之圖像點(diǎn)運(yùn)算和圖像灰度化處理
- [Python從零到壹] 四十四.圖像增強(qiáng)及運(yùn)算篇之圖像灰度線(xiàn)性變換詳解
- [Python從零到壹] 四十五.圖像增強(qiáng)及運(yùn)算篇之圖像灰度非線(xiàn)性變換詳解
- [Python從零到壹] 四十六.圖像增強(qiáng)及運(yùn)算篇之圖像閾值化處理
- [Python從零到壹] 四十七.圖像增強(qiáng)及運(yùn)算篇之腐蝕和膨脹詳解
- [Python從零到壹] 四十八.圖像增強(qiáng)及運(yùn)算篇之形態(tài)學(xué)開(kāi)運(yùn)算、閉運(yùn)算和梯度運(yùn)算
- [Python從零到壹] 四十九.圖像增強(qiáng)及運(yùn)算篇之頂帽運(yùn)算和底帽運(yùn)算
- [Python從零到壹] 五十.圖像增強(qiáng)及運(yùn)算篇之圖像直方圖理論知識(shí)和繪制實(shí)現(xiàn)
- [Python從零到壹] 五十一.圖像增強(qiáng)及運(yùn)算篇之圖像灰度直方圖對(duì)比分析萬(wàn)字詳解
- [Python從零到壹] 五十二.圖像增強(qiáng)及運(yùn)算篇之圖像掩膜直方圖和HS直方圖
- [Python從零到壹] 五十三.圖像增強(qiáng)及運(yùn)算篇之直方圖均衡化處理
- [Python從零到壹] 五十四.圖像增強(qiáng)及運(yùn)算篇之局部直方圖均衡化和自動(dòng)色彩均衡化處理
- [Python從零到壹] 五十五.圖像增強(qiáng)及運(yùn)算篇之圖像平滑(均值濾波、方框?yàn)V波、高斯濾波)
- [Python從零到壹] 五十六.圖像增強(qiáng)及運(yùn)算篇之圖像平滑(中值濾波、雙邊濾波)
- [Python從零到壹] 五十七.圖像增強(qiáng)及運(yùn)算篇之圖像銳化Roberts、Prewitt算子實(shí)現(xiàn)邊緣檢測(cè)
- [Python從零到壹] 五十八.圖像增強(qiáng)及運(yùn)算篇之圖像銳化Sobel、Laplacian算子實(shí)現(xiàn)邊緣檢測(cè)
- [Python從零到壹] 五十九.圖像增強(qiáng)及運(yùn)算篇之圖像銳化Scharr、Canny、LOG實(shí)現(xiàn)邊緣檢測(cè)
第六部分 Python圖像識(shí)別和圖像高階案例
- [Python從零到壹] 六十.圖像識(shí)別及經(jīng)典案例篇之基于閾值及邊緣檢測(cè)的圖像分割
- [Python從零到壹] 六十一.圖像識(shí)別及經(jīng)典案例篇之基于紋理背景和聚類(lèi)算法的圖像分割
第七部分 NLP與文本挖掘
第八部分 人工智能入門(mén)知識(shí)
第九部分 網(wǎng)絡(luò)攻防與AI安全
第十部分 知識(shí)圖譜構(gòu)建實(shí)戰(zhàn)
擴(kuò)展部分 人工智能高級(jí)案例
作者新開(kāi)的“娜璋AI安全之家”將專(zhuān)注于Python和安全技術(shù),主要分享Web滲透、系統(tǒng)安全、人工智能、大數(shù)據(jù)分析、圖像識(shí)別、惡意代碼檢測(cè)、CVE復(fù)現(xiàn)、威脅情報(bào)分析等文章。雖然作者是一名技術(shù)小白,但會(huì)保證每一篇文章都會(huì)很用心地撰寫(xiě),希望這些基礎(chǔ)性文章對(duì)你有所幫助,在Python和安全路上與大家一起進(jìn)步。
一.基于紋理背景的圖像分割
該部分主要講解基于圖像紋理信息(顏色)、邊界信息(反差)和背景信息的圖像分割算法。在OpenCV中,GrabCut算法能夠有效地利用紋理信息和邊界信息分割背景,提取圖像目標(biāo)物體。該算法是微軟研究院基于圖像分割和摳圖的課題,它能有效地將目標(biāo)圖像分割提取,如圖1所示[1]。
GrabCut算法原型如下所示:
- mask, bgdModel, fgdModel = grabCut(img, mask, rect, bgdModel, fgdModel, iterCount[, mode])
– image表示輸入圖像,為8位三通道圖像
– mask表示蒙板圖像,輸入/輸出的8位單通道掩碼,確定前景區(qū)域、背景區(qū)域、不確定區(qū)域。當(dāng)模式設(shè)置為GC_INIT_WITH_RECT時(shí),該掩碼由函數(shù)初始化
– rect表示前景對(duì)象的矩形坐標(biāo),其基本格式為(x, y, w, h),分別為左上角坐標(biāo)和寬度、高度
– bdgModel表示后臺(tái)模型使用的數(shù)組,通常設(shè)置為大小為(1, 65)np.float64的數(shù)組
– fgdModel表示前臺(tái)模型使用的數(shù)組,通常設(shè)置為大小為(1, 65)np.float64的數(shù)組
– iterCount表示算法運(yùn)行的迭代次數(shù)
– mode是cv::GrabCutModes操作模式之一,cv2.GC_INIT_WITH_RECT 或 cv2.GC_INIT_WITH_MASK表示使用矩陣模式或蒙板模式
下面是Python的實(shí)現(xiàn)代碼,通過(guò)調(diào)用np.zeros()函數(shù)創(chuàng)建掩碼、fgbModel和bgModel,接著定義rect矩形范圍,調(diào)用函數(shù)grabCut()實(shí)現(xiàn)圖像分割。由于該方法會(huì)修改掩碼,像素會(huì)被標(biāo)記為不同的標(biāo)志來(lái)指明它們是背景或前景。接著將所有的0像素和2像素點(diǎn)賦值為0(背景),而所有的1像素和3像素點(diǎn)賦值為1(前景),完整代碼如下所示。
# -*- coding: utf-8 -*- # By: Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt import matplotlib#讀取圖像 img = cv2.imread('nv.png')#灰度化處理圖像 grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#設(shè)置掩碼、fgbModel、bgModel mask = np.zeros(img.shape[:2], np.uint8) bgdModel = np.zeros((1,65), np.float64) fgdModel = np.zeros((1,65), np.float64)#矩形坐標(biāo) rect = (100, 100, 500, 800)#圖像分割 cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5,cv2.GC_INIT_WITH_RECT)#設(shè)置新掩碼:0和2做背景 mask2 = np.where((mask==2)|(mask==0), 0, 1).astype('uint8')#設(shè)置字體 matplotlib.rcParams['font.sans-serif']=['SimHei']#顯示原圖 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.subplot(1,2,1) plt.imshow(img) plt.title('(a)原始圖像')plt.xticks([]), plt.yticks([])#使用蒙板來(lái)獲取前景區(qū)域 img = img*mask2[:, :, np.newaxis] plt.subplot(1,2,2) plt.imshow(img) plt.title('(b)目標(biāo)圖像')plt.colorbar() plt.xticks([]), plt.yticks([]) plt.show()輸出圖像如圖2所示,圖2(a)為原始圖像,圖2(b)為圖像分割后提取的目標(biāo)人物,但人物右部分的背景仍然存在。如何移除這些背景呢?這里需要使用自定義的掩碼進(jìn)行提取,讀取一張灰色背景輪廓圖,從而分離背景與前景,希望讀者下來(lái)實(shí)現(xiàn)該功能。
二.基于K-Means聚類(lèi)算法的區(qū)域分割
K-Means聚類(lèi)是最常用的聚類(lèi)算法,最初起源于信號(hào)處理,其目標(biāo)是將數(shù)據(jù)點(diǎn)劃分為K個(gè)類(lèi)簇,找到每個(gè)簇的中心并使其度量最小化。該算法的最大優(yōu)點(diǎn)是簡(jiǎn)單、便于理解,運(yùn)算速度較快,缺點(diǎn)是只能應(yīng)用于連續(xù)型數(shù)據(jù),并且要在聚類(lèi)前指定聚集的類(lèi)簇?cái)?shù)[2]。
下面是K-Means聚類(lèi)算法的分析流程,步驟如下:
- 第一步,確定K值,即將數(shù)據(jù)集聚集成K個(gè)類(lèi)簇或小組;
- 第二步,從數(shù)據(jù)集中隨機(jī)選擇K個(gè)數(shù)據(jù)點(diǎn)作為質(zhì)心(Centroid)或數(shù)據(jù)中心;
- 第三步,分別計(jì)算每個(gè)點(diǎn)到每個(gè)質(zhì)心之間的距離,并將每個(gè)點(diǎn)劃分到離最近質(zhì)心的小組,跟定了那個(gè)質(zhì)心;
- 第四步,當(dāng)每個(gè)質(zhì)心都聚集了一些點(diǎn)后,重新定義算法選出新的質(zhì)心;
- 第五步,比較新的質(zhì)心和老的質(zhì)心,如果新質(zhì)心和老質(zhì)心之間的距離小于某一個(gè)閾值,則表示重新計(jì)算的質(zhì)心位置變化不大,收斂穩(wěn)定,則認(rèn)為聚類(lèi)已經(jīng)達(dá)到了期望的結(jié)果,算法終止;
- 第六步,如果新的質(zhì)心和老的質(zhì)心變化很大,即距離大于閾值,則繼續(xù)迭代執(zhí)行第三步到第五步,直到算法終止。
圖29-3是對(duì)身高和體重進(jìn)行聚類(lèi)的算法,將數(shù)據(jù)集的人群聚集成三類(lèi)。
在圖像處理中,通過(guò)K-Means聚類(lèi)算法可以實(shí)現(xiàn)圖像分割、圖像聚類(lèi)、圖像識(shí)別等操作,本小節(jié)主要用來(lái)進(jìn)行圖像顏色分割。假設(shè)存在一張100×100像素的灰度圖像,它由10000個(gè)RGB灰度級(jí)組成,我們通過(guò)K-Means可以將這些像素點(diǎn)聚類(lèi)成K個(gè)簇,然后使用每個(gè)簇內(nèi)的質(zhì)心點(diǎn)來(lái)替換簇內(nèi)所有的像素點(diǎn),這樣就能實(shí)現(xiàn)在不改變分辨率的情況下量化壓縮圖像顏色,實(shí)現(xiàn)圖像顏色層級(jí)分割。
在OpenCV中,Kmeans()函數(shù)原型如下所示:
- retval, bestLabels, centers = kmeans(data, K, bestLabels, criteria, attempts, flags[, centers])
– data表示聚類(lèi)數(shù)據(jù),最好是np.flloat32類(lèi)型的N維點(diǎn)集
– K表示聚類(lèi)類(lèi)簇?cái)?shù)
– bestLabels表示輸出的整數(shù)數(shù)組,用于存儲(chǔ)每個(gè)樣本的聚類(lèi)標(biāo)簽索引
– criteria表示算法終止條件,即最大迭代次數(shù)或所需精度。在某些迭代中,一旦每個(gè)簇中心的移動(dòng)小于criteria.epsilon,算法就會(huì)停止
– attempts表示重復(fù)試驗(yàn)kmeans算法的次數(shù),算法返回產(chǎn)生最佳緊湊性的標(biāo)簽
– flags表示初始中心的選擇,兩種方法是cv2.KMEANS_PP_CENTERS ;和cv2.KMEANS_RANDOM_CENTERS
– centers表示集群中心的輸出矩陣,每個(gè)集群中心為一行數(shù)據(jù)
下面使用該方法對(duì)灰度圖像顏色進(jìn)行分割處理,需要注意,在進(jìn)行K-Means聚類(lèi)操作之前,需要將RGB像素點(diǎn)轉(zhuǎn)換為一維的數(shù)組,再將各形式的顏色聚集在一起,形成最終的顏色分割。
# -*- coding: utf-8 -*- # By: Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt#讀取原始圖像灰度顏色 img = cv2.imread('scenery.png', 0) #獲取圖像高度、寬度 rows, cols = img.shape[:]#圖像二維像素轉(zhuǎn)換為一維 data = img.reshape((rows * cols, 1)) data = np.float32(data)#定義中心 (type,max_iter,epsilon) criteria = (cv2.TERM_CRITERIA_EPS +cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)#設(shè)置標(biāo)簽 flags = cv2.KMEANS_RANDOM_CENTERS#K-Means聚類(lèi) 聚集成4類(lèi) compactness, labels, centers = cv2.kmeans(data, 4, None, criteria, 10, flags)#生成最終圖像 dst = labels.reshape((img.shape[0], img.shape[1]))#用來(lái)正常顯示中文標(biāo)簽 plt.rcParams['font.sans-serif']=['SimHei']#顯示圖像 titles = ['原始圖像', '聚類(lèi)圖像'] images = [img, dst] for i in range(2): plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray'), plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show()輸出結(jié)果如圖4所示,左邊為灰度圖像,右邊為K-Means聚類(lèi)后的圖像,它將灰度級(jí)聚集成四個(gè)層級(jí),相似的顏色或區(qū)域聚集在一起。
下面代碼是對(duì)彩色圖像進(jìn)行顏色分割處理,它將彩色圖像聚集成2類(lèi)、4類(lèi)和64類(lèi)。
# -*- coding: utf-8 -*- # By: Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt#讀取原始圖像 img = cv2.imread('scenery.png') #圖像二維像素轉(zhuǎn)換為一維 data = img.reshape((-1,3)) data = np.float32(data)#定義中心 (type,max_iter,epsilon) criteria = (cv2.TERM_CRITERIA_EPS +cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)#設(shè)置標(biāo)簽 flags = cv2.KMEANS_RANDOM_CENTERS#K-Means聚類(lèi) 聚集成2類(lèi) compactness, labels2, centers2 = cv2.kmeans(data, 2, None, criteria, 10, flags)#K-Means聚類(lèi) 聚集成4類(lèi) compactness, labels4, centers4 = cv2.kmeans(data, 4, None, criteria, 10, flags)#K-Means聚類(lèi) 聚集成8類(lèi) compactness, labels8, centers8 = cv2.kmeans(data, 8, None, criteria, 10, flags)#K-Means聚類(lèi) 聚集成16類(lèi) compactness, labels16, centers16 = cv2.kmeans(data, 16, None, criteria, 10, flags)#K-Means聚類(lèi) 聚集成64類(lèi) compactness, labels64, centers64 = cv2.kmeans(data, 64, None, criteria, 10, flags)#圖像轉(zhuǎn)換回uint8二維類(lèi)型 centers2 = np.uint8(centers2) res = centers2[labels2.flatten()] dst2 = res.reshape((img.shape))centers4 = np.uint8(centers4) res = centers4[labels4.flatten()] dst4 = res.reshape((img.shape))centers8 = np.uint8(centers8) res = centers8[labels8.flatten()] dst8 = res.reshape((img.shape))centers16 = np.uint8(centers16) res = centers16[labels16.flatten()] dst16 = res.reshape((img.shape))centers64 = np.uint8(centers64) res = centers64[labels64.flatten()] dst64 = res.reshape((img.shape))#圖像轉(zhuǎn)換為RGB顯示 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) dst2 = cv2.cvtColor(dst2, cv2.COLOR_BGR2RGB) dst4 = cv2.cvtColor(dst4, cv2.COLOR_BGR2RGB) dst8 = cv2.cvtColor(dst8, cv2.COLOR_BGR2RGB) dst16 = cv2.cvtColor(dst16, cv2.COLOR_BGR2RGB) dst64 = cv2.cvtColor(dst64, cv2.COLOR_BGR2RGB)#用來(lái)正常顯示中文標(biāo)簽 plt.rcParams['font.sans-serif']=['SimHei']#顯示圖像 titles = ['原始圖像', '聚類(lèi)圖像 K=2', '聚類(lèi)圖像 K=4','聚類(lèi)圖像 K=8', '聚類(lèi)圖像 K=16', '聚類(lèi)圖像 K=64'] images = [img, dst2, dst4, dst8, dst16, dst64] for i in range(6): plt.subplot(2,3,i+1), plt.imshow(images[i], 'gray'), plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show()輸出結(jié)果如圖5所示,它對(duì)比了原始圖像和各K-Means聚類(lèi)處理后的圖像。當(dāng)K=2時(shí),聚集成2種顏色;當(dāng)K=4時(shí),聚集成4種顏色;當(dāng)K=8時(shí),聚集成8種顏色;當(dāng)K=16時(shí),聚集成16種顏色;當(dāng)K=64時(shí),聚集成64種顏色。
同樣,如果是人物圖像顯示如圖6所示,比如小珞珞。
三.總結(jié)
本文主要講解了常用的圖像分割方法,包括基于紋理背景和聚類(lèi)算法的圖像分割方法。希望讀者能結(jié)合本文知識(shí)點(diǎn),圍繞自己的研究領(lǐng)域或工程項(xiàng)目進(jìn)行深入的學(xué)習(xí),實(shí)現(xiàn)所需的圖像處理。
感謝在求學(xué)路上的同行者,不負(fù)遇見(jiàn),勿忘初心。圖像處理系列主要包括三部分,分別是:
2022年即將離去,感謝大家的鼓勵(lì)和陪伴。還是寫(xiě)一篇年終總結(jié)吧,也是自己寫(xiě)下的第10篇年終總結(jié)。曾記否,2013年感嘆《一萬(wàn)年太久,只爭(zhēng)朝夕》;2014年本科畢業(yè)寫(xiě)下《憶大學(xué)四年得與失》;2015年選擇回貴州工作,《再見(jiàn)北理工》依依不舍;2016年成為一名菜鳥(niǎo)教師,《教書(shū)路開(kāi)啟,愛(ài)情路初嘗》;2017年又借調(diào)到省發(fā)改委學(xué)習(xí)忙碌一年,留下《人生百味,有你真好》;2018年數(shù)不清加班,嘗不盡的酸甜,《向死而生,為愛(ài)而活,憶編程戎馬歲月》;2019年奔波考博重返校園,兩人通過(guò)書(shū)信寄托著情感,《把能努力的都努力好,最終等待命運(yùn)垂青》;2020年小珞珞降生,《敏兒多思,寧?kù)o致遠(yuǎn)》,希望他永遠(yuǎn)記住媽媽的辛苦;2021年,已為人父不再年輕,寫(xiě)下《緣起性空,歸來(lái)不少年》。那今年,我又寫(xiě)什么呢?
就?簡(jiǎn)單寫(xiě)幾句和回顧下吧,叫《為夢(mèng)想擦去蒙塵,愿大家平安健康快樂(lè)》。這一年仿佛什么都沒(méi)做,又好像做了些啥,忙忙碌碌,渾渾噩噩的過(guò)了。好在,腳踏實(shí)地;好在,親人支持。是啊,平平淡淡的生活,才是最真最美的生活,家人和親情才是最重要的。看著小珞珞純真的笑容,真好!新的一年里,希望所有朋友和博友都健健康康,平平安安,開(kāi)開(kāi)心心。祝好!
(By:Eastmount 2023-01-01 夜于貴陽(yáng) http://blog.csdn.net/eastmount/ )
參考文獻(xiàn):
- [1]岡薩雷斯著. 數(shù)字圖像處理(第3版)[M]. 北京:電子工業(yè)出版社,2013.
- [2]阮秋琦. 數(shù)字圖像處理學(xué)(第3版)[M]. 北京:電子工業(yè)出版社,2008.
- [3]毛星云,冷雪飛. OpenCV3編程入門(mén)[M]. 北京:電子工業(yè)出版社,2015.
- [4]張錚,王艷平,薛桂香等. 數(shù)字圖像處理與機(jī)器視覺(jué)——Visual C++與Matlab實(shí)現(xiàn)[M]. 北京:人民郵電出版社,2014.
- [5]Jumping boy. python+OpenCV圖像處理(十一)圖像輪廓檢測(cè)[EB/OL]. (2018-08-30). https://blog.csdn.net/qq_40962368/article/details/82078732.
- [6]Eastmount. [Python圖像處理] 四十.全網(wǎng)首發(fā)Python圖像分割萬(wàn)字詳解(閾值分割、邊緣分割、紋理分割、分水嶺算法、K-Means分割、漫水填充分割、區(qū)域定位)[EB/OL]. (2021-05-18). https://blog.csdn.net/Eastmount/article/details/116952580.
- [7]楊秀璋, 顏娜. Python網(wǎng)絡(luò)數(shù)據(jù)爬取及分析從入門(mén)到精通(分析篇)[M]. 北京:北京航天航空大學(xué)出版社, 2018.
- [8]Fukunaga K. and Hostetler L.D. The Estimation of the Gradient of a Density Function, with Applications in Pattern Recognition[J]. IEEE Transactions on Information Theory, 1975, 21, 32-10.
總結(jié)
以上是生活随笔為你收集整理的[Python从零到壹] 六十一.图像识别及经典案例篇之基于纹理背景和聚类算法的图像分割的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Vscode编辑器:python, C+
- 下一篇: python批量实现模板匹配处理,并将图