本文主要介紹圖像分割基于閾值處理的一些基本方法。
一、基于閾值的分割方法
1.1 固定閾值法——直方圖雙峰法
該方法基于圖像直方圖上出現(xiàn)的雙峰現(xiàn)象。當(dāng)一個(gè)圖像有雙峰現(xiàn)象時(shí),其直方圖會(huì)出現(xiàn)兩個(gè)峰,分別對應(yīng)圖像中兩種不同的顏色或亮度區(qū)域。這時(shí)我們可以使用直方圖雙峰法來自動(dòng)確定合適的閾值。
其基本思路如下:
1. 計(jì)算圖像的灰度直方圖。
2. 根據(jù)直方圖的兩個(gè)峰的位置,計(jì)算出兩個(gè)峰之間的閾值,作為圖像的閾值。
3. 根據(jù)計(jì)算出的閾值對圖像進(jìn)行二值化處理,將圖像分成目標(biāo)和背景兩個(gè)部分。
注意:該方法只適用于存在雙峰現(xiàn)象的圖像,對于單峰或峰不明顯的圖像,則需要使用其他的閾值分割方法。
使用cv2.threshold(src, thresh, maxval, type)函數(shù)。
常用的閾值處理方法有:
1.THRESH_BINARY 二值閾值化該方法將像素值與設(shè)定的閾值進(jìn)行比較,若像素值大于等于閾值,則將該像素值設(shè)為最大值,否則設(shè)為0??梢杂糜谔幚砘叶葓D像與彩色圖像。
2.THRESH_BINARY_INV 反二值閾值化該方法將像素值與設(shè)定的閾值進(jìn)行比較,若像素值小于閾值,則將該像素值設(shè)為最大值,否則設(shè)為0??梢杂糜谔幚砘叶葓D像與彩色圖像。
3.THRESH_TRUNC 截?cái)嚅撝祷摲椒▽⑾袼刂蹬c設(shè)定的閾值進(jìn)行比較,若像素值大于等于閾值,則將該像素值設(shè)為閾值,否則不更改??梢杂糜谔幚砘叶葓D像。
4.THRESH_TOZERO 零閾值化該方法將像素值與設(shè)定的閾值進(jìn)行比較,若像素值大于等于閾值,則不更改,否則設(shè)為0??梢杂糜谔幚砘叶葓D像。
5.THRESH_TOZERO_INV 反零閾值化該方法將像素值與設(shè)定的閾值進(jìn)行比較,若像素值小于等于閾值,則不更改,否則設(shè)為0??梢杂糜谔幚砘叶葓D像
代碼:
# 直方圖雙峰法import cv2import numpy as npfrom matplotlib import pyplot as plt
# 讀取圖像(閾值處理方法不同)img = cv2.imread('house.tif',0)x,img1 = cv2.threshold(img,150,255,cv2.THRESH_BINARY)x,img2 = cv2.threshold(img,150,255,cv2.THRESH_TRUNC)x,img3 = cv2.threshold(img,150,255,cv2.THRESH_TOZERO)
# 顯示原始圖像和恢復(fù)后的圖像plt.figure(figsize=(20, 20))plt.subplot(221), plt.imshow(img, cmap='gray')plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(222), plt.imshow(img1, cmap='gray')plt.title('seg img THRESH_BINARY'), plt.xticks([]), plt.yticks([])plt.subplot(223), plt.imshow(img2, cmap='gray')plt.title('seg img THRESH_TRUNC'), plt.xticks([]), plt.yticks([])plt.subplot(224), plt.imshow(img3, cmap='gray')plt.title('seg img THRESH_TOZERO'), plt.xticks([]), plt.yticks([])plt.show()
這種全局閾值處理方法缺點(diǎn)是對噪聲的處理的效果并不好,需要進(jìn)行平滑處理。
import cv2import randomimport numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('house.tif',0)
# 加上高斯噪聲noise = np.random.normal(0,100,size=img.size).reshape(img.shape[0],img.shape[1])img1 = img + noiseimg1 = np.clip(img1,0,255)
# 平滑處理img2 = cv2.GaussianBlur(img1,(5,5),0)
# 直方圖雙峰法x,img3 = cv2.threshold(img,150,255,cv2.THRESH_BINARY)x,img4 = cv2.threshold(img1,150,255,cv2.THRESH_BINARY)x,img5 = cv2.threshold(img2,150,255,cv2.THRESH_BINARY)
# 顯示原始圖像和恢復(fù)后的圖像plt.figure(figsize=(20, 20))plt.subplot(221), plt.imshow(img, cmap='gray')plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(222), plt.imshow(img1, cmap='gray')plt.title('noise img'), plt.xticks([]), plt.yticks([])plt.subplot(223), plt.imshow(img4, cmap='gray')plt.title('seg noise img '), plt.xticks([]), plt.yticks([])plt.subplot(224), plt.imshow(img5, cmap='gray')plt.title('seg blur img '), plt.xticks([]), plt.yticks([])plt.show()
1.2 迭代閾值圖像分割
這一種自適應(yīng)的圖像分割方法,其主要思想是通過對圖像的灰度值進(jìn)行迭代,不斷調(diào)整閾值使得分割更加準(zhǔn)確。
分割步驟如下:
1. 隨機(jī)選取一個(gè)初始閾值(可以是圖像的平均灰度值)
2. 根據(jù)該閾值將圖像分割成兩部分:小于等于閾值的部分為前景,大于閾值的部分為背景
3. 計(jì)算前景和背景的平均灰度值
4. 將前景和背景的平均灰度值的平均值作為新的閾值
5. 如果新的閾值和原來的閾值相同,則分割結(jié)束。否則,回到第2步,重復(fù)迭代直到收斂
代碼:
# 迭代閾值圖像分割法import numpy as npfrom PIL import Image
# 讀取圖像img = Image.open('house.tif').convert('L')width, height = img.sizepixels = img.load()
# 初始化閾值threshold = 150delta = 1while delta > 0: # 根據(jù)閾值將圖像分割 foreground = [] background = [] for y in range(height): for x in range(width): if pixels[x, y] > threshold: background.append(pixels[x, y]) #大于閾值的部分為背景 else: foreground.append(pixels[x, y]) #小于等于閾值的部分為前景 avr_foreground = sum(foreground) // len(foreground) avr_background = sum(background) // len(background) # 更新閾值 new_threshold = (avr_foreground + avr_background) // 2 delta = abs(new_threshold - threshold) threshold = new_threshold
# 重新分割圖像for y in range(height): for x in range(width): if pixels[x, y] > threshold: pixels[x, y] = 255 else: pixels[x, y] = 0
# 顯示分割后的圖像img.show('result.jpg')
優(yōu)點(diǎn): 1.迭代閾值圖像分割相對于靜態(tài)閾值分割而言,具有更高的實(shí)用性和魯棒性。 2.該方法能夠有效地應(yīng)對光照變化、背景復(fù)雜多樣等情況下的圖像分割問題。缺點(diǎn): 對于大尺寸圖像,迭代閾值圖像分割的計(jì)算速度可能成為其一個(gè)缺點(diǎn)。
1.3 自適應(yīng)閾值圖像分割
1.3.1 常規(guī)方法
分割步驟如下:
1. 針對輸入的灰度圖像,定義一個(gè)大小為 N × N N×NN×N 的窗口,在窗口中央選擇一個(gè)像素點(diǎn)作為處理的核心像素點(diǎn)。
2. 根據(jù)窗口內(nèi)的像素信息計(jì)算局部閾值,作為當(dāng)前像素的閾值,這個(gè)閾值可以是均值、中值、模式等統(tǒng)計(jì)量。
3. 將處理完的像素點(diǎn)和當(dāng)前像素點(diǎn)的局部閾值進(jìn)行比較,大于等于閾值的像素點(diǎn)設(shè)置為白色,小于閾值的像素點(diǎn)設(shè)置為黑色,分割出新的二值化圖像。
4. 將窗口向圖像的其他區(qū)域移動(dòng),繼續(xù)對各個(gè)區(qū)域進(jìn)行高斯自適應(yīng)閾值分割,直到圖像的所有區(qū)域都被分割為二值化圖像。
代碼:
# 自適應(yīng)閾值圖像分割import numpy as npfrom PIL import Image
# 圖像預(yù)處理img = Image.open('house.tif').convert('L')width, height = img.sizepixels = img.load()block_size = 11 # 設(shè)置塊大小
# 分割圖像并計(jì)算局部閾值for y in range(0, height, block_size): for x in range(0, width, block_size): # 獲取局部區(qū)域 region = [] for j in range(y, y+block_size): for i in range(x, x+block_size): if i < width and j < height: region.append(pixels[i, j]) # 計(jì)算局部區(qū)域平均值作為閾值 threshold = sum(region) // len(region) # 對區(qū)域進(jìn)行二值化處理 for j in range(y, y+block_size): for i in range(x, x+block_size): if i < width and j < height: if pixels[i, j] > threshold: pixels[i, j] = 255 else: pixels[i, j] = 0
#顯示分割后的圖像img.show('result.jpg')
也可以直接調(diào)用cv2.adaptiveThreshold()函數(shù)實(shí)現(xiàn)。
import cv2# 讀取原始圖像img = cv2.imread('house.tif', 0)# 自適應(yīng)閾值分割img_thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)# 顯示結(jié)果cv2.imshow('Original Image', img)cv2.imshow('Adaptive Thresholding', img_thresh)cv2.waitKey(0)cv2.destroyAllWindows()
1.3.2 大津法(OTSU)
大津法基于以下觀察結(jié)果:當(dāng)圖像被分為多個(gè)區(qū)域時(shí),如果區(qū)域內(nèi)的像素值差異較小,區(qū)域的均值方差就會(huì)較小。而當(dāng)區(qū)域內(nèi)像素值差異較大時(shí),區(qū)域的均值方差就會(huì)較大。因此,局部圖像的全局最佳閾值是能使類間方差最大的那個(gè)灰度級。
步驟:
代碼:
import cv2
# 讀取圖片img = cv2.imread('house.tif', 0)
# 大津法閾值分割ret, img_thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 顯示結(jié)果cv2.imshow('Original Image', img)cv2.imshow('OTSU Thresholding', img_thresh)cv2.waitKey(0)cv2.destroyAllWindows()
優(yōu)點(diǎn): 多種檢測任務(wù)效果較好。缺點(diǎn): 計(jì)算量比較大,適用于數(shù)據(jù)量較小的圖像分割場合。
參考文獻(xiàn):
[1] 阮秋琦,阮宇智譯;(美)拉斐爾·C.岡薩雷斯,理查德·E.伍茲.國外電子書與通信教材系列 數(shù)字圖像處理 第4版[M].北京:電子工業(yè)出版社,2020
上一篇:電動(dòng)機(jī)多繞幾圈有影響嗎?
下一篇:編碼器與PLC的接線方法
推薦閱讀最新更新時(shí)間:2025-07-01 16:46


- 潤石科技推出RS3215-Q1系列低壓差線性穩(wěn)壓器
- CANape 23開啟智能測試新時(shí)代(下)
- 軟件定義汽車電源管理設(shè)計(jì):NXP的PMIC選型攻略解析
- 深度測評時(shí)空壺X1同聲傳譯器:全球最先進(jìn)AI同傳設(shè)備的非凡實(shí)力
- 鐵威馬F6-424 Max:六盤位擴(kuò)容+國產(chǎn)系統(tǒng)兼容,小白也能玩轉(zhuǎn)NAS
- 開關(guān)電源給鉛酸電池恒流恒壓充電的電流跳動(dòng)問題解析
- 自動(dòng)駕駛中的激光雷達(dá)是否會(huì)傷害攝像頭?
- AI/ML賦能的玻璃破碎傳感器:智能家居安防的新突破
- 觸覺技術(shù)助力企業(yè)在激烈的市場競爭中脫穎而出
- FAN6224同步整流控制器正激續(xù)流整流典型應(yīng)用
- LTC3621EMS8E-2 1.2Vout、同步至 600kHz、強(qiáng)制連續(xù)模式同步降壓型穩(wěn)壓器的典型應(yīng)用
- MC34071ADR2G快速建立逆變器的典型應(yīng)用
- LT3970EMS-3.3 5V 降壓轉(zhuǎn)換器的典型應(yīng)用
- LT1171HVIT、2.5A 高效恒流充電器的典型應(yīng)用
- 具有輕負(fù)載效率的 NCP5252 2.0 A、1.0 MHz 集成同步降壓穩(wěn)壓器的典型應(yīng)用
- DC124,使用 LTC1416 高速 14 位、400Ksps 模數(shù)轉(zhuǎn)換器的演示板
- AD8618ARZ-REEL單電源緩沖DAC輸出運(yùn)算放大器典型應(yīng)用電路
- 使用 MaxLinear, Inc 的 SPX385AS-1.2/TR 的參考設(shè)計(jì)
- 使用 NXP Semiconductors 的 MC34SB0410AE 的參考設(shè)計(jì)
- STM32入門學(xué)習(xí)之EXTI外部中斷(STM32F030F4P6基于CooCox IDE)
- 英飛凌賦能FlexPower Modules全新開關(guān)式電容中間總線轉(zhuǎn)換器
- 小米12 Pro全球首發(fā)索尼IMX707:1/1.28英寸大底
- 51單片機(jī)驅(qū)動(dòng) LCD1602液晶顯示系統(tǒng)
- 英特爾Lisa Spelman:為數(shù)據(jù)中心用戶打造高性能和高能效的未來
- 啥是示波器?示波器的運(yùn)用辦法圖
- 單片機(jī)串口最底層的本質(zhì)?
- SGS100A矢量信號(hào)發(fā)生器的特點(diǎn)性能及應(yīng)用范圍
- ROHM開發(fā)出汽車內(nèi)飾用RGB貼片LED,減少由混色引起的色差問題
- 蘋果被判侵犯3G專利,需向西班牙公司TOT賠償1.1億美元
- 從設(shè)計(jì)概念到 FPGA 原型僅需數(shù)分鐘,印度 InCore 完成 SoC Generator 平臺(tái)硅驗(yàn)證
- 消息稱因難尋客戶,三星推遲美國芯片工廠的完工時(shí)間
- BOE(京東方)聯(lián)合榮耀打造榮耀Magic V5 以領(lǐng)先LTPO技術(shù)打造行業(yè)新標(biāo)桿
- 華為ADS 4發(fā)布:多傳感器融合,提升自動(dòng)駕駛安全性
- 曉鶯說:線控制動(dòng)變革風(fēng)云
- 大眾商用車推出AirConsole 將其信息娛樂系統(tǒng)擴(kuò)展為游戲機(jī)
- 福州大學(xué)發(fā)明新機(jī)器視覺傳感器 可使機(jī)器人對極端光照做出超快反應(yīng)
- 蘋果獲沉浸式虛擬顯示器相關(guān)的專利
- 英特爾汽車“折戟”,十年布局一夜歸零
- 中微公司定增募資82.1億元:大基金二期獲25億元
- 字節(jié)跳動(dòng)取消了大小周
- 龍騰股份MOSFET售價(jià)下滑,低研發(fā)投入布局IGBT
- 集微指數(shù)下跌1.62% 洲明科技調(diào)漲LED顯示產(chǎn)品價(jià)格
- COF封裝需求旺盛, 南茂獲多家手機(jī)品牌OLED DDI訂單
- STM32F103ZE FreeRTOS任務(wù)創(chuàng)建與刪除
- PT2272-M4--4鍵無線遙控器(STM32)
- HC-SR505紅外感應(yīng)模塊驅(qū)動(dòng)(STM32)
- GP2Y10驅(qū)動(dòng)含PM2.5和AQI(STM32)
- DS1302驅(qū)動(dòng)(STM32)
- 光影聚會(huì) – 感受Cree與艾睿電子帶給你的電流時(shí)光: 北京、佛山半導(dǎo)體照明研討會(huì)
- 圖片漸進(jìn)漸出效果
- ST60毫米波水介質(zhì)數(shù)據(jù)傳輸測試報(bào)告
- 求教:求可以測噴霧速度方案
- LM3S1138對GPIO口的操作
- beaglebone black 裝桌面Ubuntu
- Linux精品教程
- LTH7常見的充電芯片+鋰電池升壓和保護(hù)組成的簡易TWS充電盒原理圖
- 【為C2000做貢獻(xiàn)】DSP嵌入式應(yīng)用系統(tǒng)開發(fā)典型實(shí)例
- 大哥!wince 怎么做窗體嵌套啊,沒有mdi