国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

淺談圖像分割基于閾值處理的基本方法

發(fā)布者:AngelicWhisper最新更新時(shí)間:2025-03-18 來源: elecfans關(guān)鍵字:圖像分割  基本方法 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

本文主要介紹圖像分割基于閾值處理的一些基本方法。

一、基于閾值的分割方法

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ù)。

56047284-a05f-11ee-8b88-92fbcf53809c.png

常用的閾值處理方法有:

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()

5618e476-a05f-11ee-8b88-92fbcf53809c.png

這種全局閾值處理方法缺點(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()

563cd156-a05f-11ee-8b88-92fbcf53809c.png

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')

5651895c-a05f-11ee-8b88-92fbcf53809c.png

優(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')

566c98c8-a05f-11ee-8b88-92fbcf53809c.png

也可以直接調(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()

568be098-a05f-11ee-8b88-92fbcf53809c.png

1.3.2 大津法(OTSU)

大津法基于以下觀察結(jié)果:當(dāng)圖像被分為多個(gè)區(qū)域時(shí),如果區(qū)域內(nèi)的像素值差異較小,區(qū)域的均值方差就會(huì)較小。而當(dāng)區(qū)域內(nèi)像素值差異較大時(shí),區(qū)域的均值方差就會(huì)較大。因此,局部圖像的全局最佳閾值是能使類間方差最大的那個(gè)灰度級。

步驟:

56a5d96c-a05f-11ee-8b88-92fbcf53809c.png

代碼:

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()

56c6986e-a05f-11ee-8b88-92fbcf53809c.png

優(yōu)點(diǎn):  多種檢測任務(wù)效果較好。缺點(diǎn):  計(jì)算量比較大,適用于數(shù)據(jù)量較小的圖像分割場合。

參考文獻(xiàn):

[1] 阮秋琦,阮宇智譯;(美)拉斐爾·C.岡薩雷斯,理查德·E.伍茲.國外電子書與通信教材系列 數(shù)字圖像處理 第4版[M].北京:電子工業(yè)出版社,2020


關(guān)鍵字:圖像分割  基本方法 引用地址:淺談圖像分割基于閾值處理的基本方法

上一篇:電動(dòng)機(jī)多繞幾圈有影響嗎?
下一篇:編碼器與PLC的接線方法

推薦閱讀最新更新時(shí)間:2025-07-01 16:46

淺談圖像分割基于閾值處理基本方法
本文主要介紹圖像分割基于閾值處理的一些基本方法。 一、基于閾值的分割方法 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,
[嵌入式]
淺談<font color='red'>圖像</font><font color='red'>分割</font>基于<font color='red'>閾值</font><font color='red'>處理</font>的<font color='red'>基本</font><font color='red'>方法</font>
基于邊緣信息的圖像分割技術(shù)研究
1引言 所謂圖像分割就是根據(jù)目標(biāo)與背景的先驗(yàn)知識(shí),對圖像中的目標(biāo)、背景進(jìn)行標(biāo)記、定位,然后將要識(shí)別的目標(biāo)從背景或其他偽目標(biāo)中分離出來。圖像分割是圖像理解的重要組成部分,其目的是將目標(biāo)和背景分離,為目標(biāo)識(shí)別、精確定位等后續(xù)處理提供依據(jù),其結(jié)果將直接影響到其后的信息處理過程。如何快速、有效地將感興趣的目標(biāo)從復(fù)雜的背景中分割出來一直是國內(nèi)外研究的熱點(diǎn)。 圖像分割一般可分為基于區(qū)域的分割和基于邊緣的分割2種。而采用的方法通常有閾值比較法、區(qū)域生長法、象素迭代聚類法等。一般邊緣檢測具有邊緣定位準(zhǔn)確、運(yùn)算速度較快等優(yōu)點(diǎn),因此是人們研究得比較多的一種方法。本文簡單介紹了邊緣圖像分割的方法,列舉了一階微分算子、Canny算子、Roberts算
[電源管理]
pic單片機(jī)程序設(shè)計(jì)的基本方法解析
pic單片機(jī)在學(xué)習(xí)和工作中均扮演著重要角色,在往期文章中,小編曾對pic單片機(jī)匯編指令加以介紹,以幫助大家更好掌握pic單片機(jī)。而在本文中,將介紹pic單片機(jī)程序設(shè)計(jì)內(nèi)容,以助大家寫出更為優(yōu)美的pic單片機(jī)程序,主要內(nèi)容如下。 1、PIC單片機(jī)程序的基本格式 先介紹二條偽指令: EQU ——標(biāo)號(hào)賦值偽指令 ORG ——地址定義偽指令 PIC16C5X單片機(jī)在RESET后指令計(jì)算器PC被置為全“1”,所以PIC16C5X幾種型號(hào)芯片的復(fù)位地址為: PIC16C54/55:1FFH PIC16C56:3FFH PIC16C57/58:7FFH 一般來說,PIC單片機(jī)的源程序并沒有要求統(tǒng)一的格式,大家可以根據(jù)自己的風(fēng)格來編寫。但這里
[單片機(jī)]
pic單片機(jī)程序設(shè)計(jì)的<font color='red'>基本</font><font color='red'>方法</font>解析
印刷電路板的基本設(shè)計(jì)方法和原則要求
   一、印刷線路組件布局結(jié)構(gòu)設(shè)計(jì)討論   一臺(tái)性能優(yōu)良的儀器,除選擇高質(zhì)量的元器件,合理的電路外,印刷線路板的組件布局和電氣聯(lián)機(jī)方向的正確結(jié)構(gòu)設(shè)計(jì)是決定儀器能否可靠工作的一個(gè)關(guān)鍵問題,對同一種組件和參數(shù)的電路,由于組件布局設(shè)計(jì)和電氣聯(lián)機(jī)方向的不同會(huì)產(chǎn)生不同的結(jié)果,其結(jié)果可能存在很大的差異。因而,必須把如何正確設(shè)計(jì)印刷線路板組件布局的結(jié)構(gòu)和正確選擇布線方向及整體儀器的工藝結(jié)構(gòu)三方面聯(lián)合起來考慮,合理的工藝結(jié)構(gòu),既可消除因布線不當(dāng)而產(chǎn)生的噪聲干擾,同時(shí)便于生產(chǎn)中的安裝、調(diào)試與檢修等。   下面我們針對上述問題進(jìn)行討論,由于優(yōu)良“結(jié)構(gòu)”沒有一個(gè)嚴(yán)格的“定義”和“模式”,因而下面討論,只起拋磚引玉的作用,僅供參考。每一種儀器的結(jié)構(gòu)
[單片機(jī)]
小廣播
最新嵌入式文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved