圖像預處理-色彩空間補充,灰度化與二值化

一.圖像色彩空間轉換

1.1 HSV顏色空間

HSV顏色空間使用色調(Hue)、飽和度(Saturation)和亮度(Value)三個參數來表示顏色

一般對顏色空間的圖像進行有效處理都是在HSV空間進行的,然后對于基本色中對應的HSV分量需要給定一個嚴格的范圍,下面是通過實驗計算的模糊范圍(準確的范圍在網上都沒有給出)。

H: 0— 180

S: 0— 255

V: 0— 255

也就是可以通過顏色的范圍來提取圖像中的一種或多種顏色。

HSV的好處

- 符合人類對顏色的感知方式:人類對顏色的感知是基于色調、飽和度亮度三個維度的,而HSV顏色空間恰好就是通過這三個維度來描述顏色的。因此,使用HSV空間處理圖像可以更直觀地調整顏色和進行色彩平衡等操作,更符合人類的感知習慣。

- 顏色調整更加直觀:例如,在RGB空間中要調整紅色系的顏色,需要同時調整R、G、B三個通道的數值,而在HSV空間中只需要調整色調飽和度即可。

- 降維處理有利于計算:在圖像處理中,降維處理可以減少計算的復雜性和計算量。HSV顏色空間相對于RGB顏色空間,減少了兩個維度(紅、綠、藍)

1.2 顏色空間轉換

cv2.cvtColor(img,code)

code:指定轉換的類型,可以使用預定義的轉換代碼。

- cv2.COLOR_RGB2GRAY 表示從RGB到灰度圖像的轉換

- cv2.COLOR_BGR2HSV?從RGB到HSV的轉換

二.灰度化

彩色圖是由R、G、B三個通道組成,而灰度圖只有一個通道。

灰度圖像與黑白圖像不同,在計算機圖像領域中黑白圖像只有黑色與白色兩種顏色但是,灰度圖像的取值可以是0~255,不過只有一個通道。這樣可以有256級灰度

# 在讀取時也可以直接將其轉化為灰度圖
import cv2 as cvimg = cv.imread('../images/flower.png', cv.IMREAD_GRAYSCALE)
cv.imshow('Gray Image', img)
cv.waitKey(0)
cv.destroyAllWindows()

2.1 最大值法

從R、G、B三個通道的值中選出最大的一個,并將其作為灰度圖像中對應位置的像素值.

2.2 平均值法

將R、G、B三個通道的像素值全部加起來,然后再除以三。

2.3 加權均值法(最常用且內置)

????????按照一定的權重去乘以每個通道的像素值,并將其相加,得到最后的值就是灰度圖像中對應位置的像素值。權重的比例為: R乘以0.299G乘以0.587B乘以0.114,這是經過大量實驗得到的一個權重比例,也是一個比較常用的權重比例

import cv2 as cvimg = cv.imread('../images/flower.png')
flower = cv.resize(img,(200, 200))gray = cv.cvtColor(flower, cv.COLOR_BGR2GRAY)cv.imshow('Original', flower)
cv.imshow('Gray', gray) cv.waitKey(0)   
cv.destroyAllWindows()

三. 二值化處理

二值圖像的二維矩陣僅由兩個值構成,也就是灰度圖像的取值范圍變了,只有0,1

- 其操作的圖像必須灰度圖

二值化處理函數

_,binary = cv2.threshold(img,thresh,maxval,type)

- img:輸入圖像,要進行二值化處理的灰度圖

- thresh:設定的閾值。

- maxval:當像素值大于(或小于,取決于閾值類型)thresh時,該像素被賦予的值。

- type:閾值處理的類型。

- 返回值

? - 第一個值(通常用下劃線表示):計算出的閾值,若使用自適應閾值法,會根據算法自動計算出這個值。

? - 第二個值(binary):二值化后的圖像矩陣。與輸入圖像尺寸相同。

3.1 閾值法

THRESH_BINARY

????????設置一個閾值,將灰度圖中的每一個像素值與該閾值進行比較,小于等于閾值的像素就被設置為0(通常代表背景),大于閾值的像素就被設置為maxval(通常為255)

import cv2 as cvimg = cv.imread('../images/flower.png')
flower = cv.resize(img,(200, 200))# 獲得灰度圖
gray = cv.cvtColor(flower, cv.COLOR_BGR2GRAY)# 使用閾值法二值化
_,binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY)cv.imshow('flower', gray)
cv.imshow('binary', binary)
cv.waitKey(0)
cv.destroyAllWindows()

3.2 反閾值法

THRESH_BINARY_INV

與閾值法相反

import cv2 as cvimg = cv.imread('../images/flower.png')
flower = cv.resize(img,(200, 200))# 獲得灰度圖
gray = cv.cvtColor(flower, cv.COLOR_BGR2GRAY)# 使用反閾值法二值化
_,binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY_INV)cv.imshow('flower', gray)
cv.imshow('binary', binary)
cv.waitKey(0)
cv.destroyAllWindows()

3.3 截斷閾值法

THRESH_TRUNC

所有像素與閾值進行比較,像素值大于閾值的部分將會被修改為閾值小于等于閾值的部分不變

import cv2 as cvimg = cv.imread('../images/flower.png')
flower = cv.resize(img,(200, 200))# 獲得灰度圖
gray = cv.cvtColor(flower, cv.COLOR_BGR2GRAY)# 使用截斷閾值法二值化
# 可以看到我們依然給了maxval,但是實際上這個maxval沒有起作用,但是還是要寫不然會報錯
_,binary = cv.threshold(gray, 127, 255, cv.THRESH_TRUNC)cv.imshow('flower', gray)
cv.imshow('binary', binary)
cv.waitKey(0)
cv.destroyAllWindows()

3.4 低閾值零處理

THRESH_TOZERO

像素值小于等于閾值的部分被置為0,大于閾值的部分不變。

import cv2 as cvimg = cv.imread('../images/flower.png')
flower = cv.resize(img,(200, 200))# 獲得灰度圖
gray = cv.cvtColor(flower, cv.COLOR_BGR2GRAY)# 使用低閾值零處理二值化_,binary = cv.threshold(gray, 127, 255, cv.THRESH_TOZERO)cv.imshow('flower', gray)
cv.imshow('binary', binary)
cv.waitKey(0)
cv.destroyAllWindows()

3.5 超閾值零處理

THRESH_TOZERO_INV

像素值大于閾值的部分置為0,像素值小于等于閾值部分不變

import cv2 as cvimg = cv.imread('../images/flower.png')
flower = cv.resize(img,(200, 200))# 獲得灰度圖
gray = cv.cvtColor(flower, cv.COLOR_BGR2GRAY)# 使用超閾值零處理二值化
_,binary = cv.threshold(gray, 127, 255, cv.THRESH_TOZERO_INV)cv.imshow('flower', gray)
cv.imshow('binary', binary)
cv.waitKey(0)
cv.destroyAllWindows()

3.6 OTSU閾值法

cv2.THRESH_OTS

?cv2.THRESH_OTS 并不是一個有效的閾值類型或標,它其實是用來計算合適閾值的方法,通常與 THRESH_BINARY?或 THRESH_BINARY_INV?結合使用

OTSU算法是通過一個值將這張圖分前景背景

(也就是灰度圖中小于這個值的是一類,大于這個值的是一類。例如,如果你設置閾值為128,則所有大于128的像素點可以被視作前景,而小于等于128的像素點則被視為背景。)

????????通過統計學方法(最大類間方差)來驗證該值的合理性,當根據該值進行分割時,使用最大類間方差計算得到的值最大時,該值就是二值化算法中所需要的閾值。通常該值是從灰度圖中的最小值加1開始進行迭代計算,直到灰度圖中的最大像素值減1,然后把得到的最大類間方差值進行比較。

import cv2 as cvimg = cv.imread('../images/flower.png')
flower = cv.resize(img,(200, 200))# 獲得灰度圖
gray = cv.cvtColor(flower, cv.COLOR_BGR2GRAY)# 使用OTSU閾值法二值化(默認是結合閾值法即THRESH_BINARY)
_,binary = cv.threshold(gray, 127, 255, cv.THRESH_OTSU)
# 結合反閾值法
_,binary1 = cv.threshold(gray, 0, 255, cv.THRESH_OTSU+cv.THRESH_BINARY_INV)cv.imshow('flower', gray)
cv.imshow('binary', binary)
cv.imshow('binary1', binary1)
cv.waitKey(0)
cv.destroyAllWindows()

3.7 自適應二值化

????????其會對圖像中的所有像素點計算其各自閾值,將圖像劃分為固定大小的塊,然后對每個塊進行閾值處理。

cv2.adaptiveThreshold

(image_np_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 7, 10)

參數:

maxval:最大閾值,一般為255

adaptiveMethod:小區域閾值的計算方式:

ADAPTIVE_THRESH_MEAN_C:小區域內取均值

ADAPTIVE_THRESH_GAUSSIAN_C:小區域內加權求和,權重是個高斯核

thresholdType:二值化方法,只能使用THRESH_BINARYTHRESH_BINARY_INV,也就是閾值法和反閾值法

blockSize:選取的小區域的面積,如7就是7\*7的小塊。

C:最終閾值等于小區域計算出的閾值再減去此值
?

????????自適應二值化更加適合用在明暗分布不均的圖片,因為圖片的明暗不均,導致圖片上的每一小部分都要使用不同的閾值進行二值化處理。

3.7.1 取均值

????????從圖片的左上角開始計算其鄰域內的平均值,用一個均值卷積核來實現,將卷積核中心對準要閾值處理的像素,然后計算這個卷積核內所有像素的平均值,最后減去常數C得到該點閾值。

如圖,如果像取第一個元素卷積核有空缺處,就按邊緣填充的方式填充。

3.7.2 加權求和

????????對小區域內的像素進行加權求和得到新的閾值,其權重值來自于高斯分布。與取均值的區別就是采用另一種規則的卷積核進行閾值選擇,函數中有著基本相同的參數。

3*3卷積核示例:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901521.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901521.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901521.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Midnight Flag CTF 2025

周末還是三個比賽,可惜不好弄。不是遠端連不上就是遠端打不開。再有就是太難了。 Crypto ABC 這個題還是不算難的。給了兩個30位數的平方和,并且pu1*baser0,qu2*baser1其中r 都很小,可以copper。 只是sage里的two_squres不管用&#xff0…

深度學習--激活函數

激活函數通過計算加權和并加上偏置來確定神經元是否應該倍激活,它們將輸入信號轉換為輸出的可微運算。大多數激活函數都是非線性的,由于激活函數是深度學習的基礎,下面簡要介紹一些常見的激活函數。 1 RelU函數 最受歡迎的激活函數是修正線性…

深入解析 OrdinalEncoder 與 OneHotEncoder:核心區別與實戰應用

標題:深入解析 OrdinalEncoder 與 OneHotEncoder:核心區別與實戰應用 摘要: 本文詳細探討了機器學習中類別特征編碼的兩種核心方法——OrdinalEncoder 和 OneHotEncoder。通過對比兩者的功能、特點、適用場景及代碼實現,幫助讀者…

CTF web入門之命令執行 完整版

web29 文件名過濾 由于flag被過濾,需要進行文件名繞過,有以下幾種方法: 1.通配符繞過 fla?.* 2.反斜杠繞過 fl\ag.php 3.雙引號繞過 fl’‘ag’.php 還有特殊變量$1、內聯執行等 此外 讀取文件利用cat函數,輸出利用system、passthru 、echo echo `nl flag.php`; ec…

【Linux實踐系列】:用c/c++制作一個簡易的進程池

🔥 本文專欄:Linux Linux實踐項目 🌸作者主頁:努力努力再努力wz 💪 今日博客勵志語錄: 人生沒有標準答案,你的錯題本也能寫成傳奇。 ★★★ 本文前置知識: 匿名管道 1.前置知識回顧…

2.2 函數返回值

1.回顧def def sum(x,y): return xy res sum(10,20) #調用函數 print(res) 2.函數的三個重要屬性 -函數的類型:function -函數的ID:16進制的整數數值 -函數的值:封裝在函數中的數據和代碼 # - 函數是一塊內存空間,通過…

【3GPP核心網】【5G】精講5G網絡語音業務系統架構

1. 歡迎大家訂閱和關注,精講3GPP通信協議(2G/3G/4G/5G/IMS)知識點,專欄會持續更新中.....敬請期待! 目錄 1. 音視頻業務 2. 消息類業務 SMS over IMS SMS over NAS 3. 互聯互通架構 3.1 音視頻業務互通場景 3.2 5G 用戶與 5G 用戶互通 3.3 5G 用戶與 4G 用戶的互通…

系統環境變量有什么實際作用,為什么要配置它

系統環境變量有什么實際作用,為什么要配置它 系統環境變量具有以下重要實際作用: 指定程序路徑:操作系統通過環境變量來知曉可執行文件、庫文件等的存儲位置例如,當你在命令提示符或終端中輸入一個命令時,系統會根據環境變量PATH中指定的路徑去查找對應的可執行文件。如果…

qt/C++面試題自用學習(更新中)

最近在找工作…面試中遇到了的問題總以為自己會但回答的時候磕磕巴巴,覺得還是要總結一下: vector和list的區別 vector list 底層數據結構 基于動態數組實現,元素在內存中連續存儲 基于雙向鏈表實現,元素在內存中非連續存儲&…

Day09【基于Tripletloss實現的簡單意圖識別對話系統】

基于Tripletloss實現的表示型文本匹配 目標數據準備參數配置數據處理Triplet Loss目標Triplet Loss計算公式公式說明 模型構建網絡結構設計網絡訓練目標損失函數設計 主程序推理預測類初始化加載問答知識庫文本向量化知識庫查詢主程序main測試測試效果 參考博客 目標 在此之前…

說說什么是冪等性?

大家好,我是鋒哥。今天分享關于【說說什么是冪等性?】面試題。希望對大家有幫助; 說說什么是冪等性? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 冪等性(Idempotence) 是指在某些操作或請求…

【自相關】全局 Moran’s I 指數

自相關(Autocorrelation),也稱為序列相關性,指的是同一變量在不同時間或空間點的值之間的關系。簡而言之,自相關就是一個變量與自身在不同位置或時間點的相關性 自相關:針對同一屬性之間進行分析相關性 本…

【C#】Html轉Pdf,Spire和iTextSharp結合,.net framework 4.8

🌹歡迎來到《小5講堂》🌹 🌹這是《C#》系列文章,每篇文章將以博主理解的角度展開講解。🌹 🌹溫馨提示:博主能力有限,理解水平有限,若有不對之處望指正!&#…

KrillinAI:視頻跨語言傳播的一站式AI解決方案

引言 在全球內容創作領域,跨語言傳播一直是內容創作者面臨的巨大挑戰。傳統的視頻本地化流程繁瑣,涉及多個環節和工具,不僅耗時耗力,還常常面臨質量不穩定的問題。隨著大語言模型(LLM)技術的迅猛發展,一款名為Krillin…

AllDup:高效管理重復文件

AllDup 是一款免費高效的重復文件管理工具,專為 Windows 系統設計,支持快速掃描并清理冗余文件,優化存儲空間。它通過智能算法識別重復內容,覆蓋文本、圖片、音頻、視頻等常見文件類型?。軟件提供便攜版與安裝版,無需…

C++進程間通信開發實戰:高效解決項目中的IPC問題

C進程間通信開發實戰:高效解決項目中的IPC問題 在復雜的軟件項目中,進程間通信(Inter-Process Communication, IPC)是實現模塊化、提高系統性能與可靠性的關鍵技術之一。C作為一門高性能的編程語言,廣泛應用于需要高效…

用 Depcheck 去除Vue項目沒有用到的依賴

1. 安裝 Depcheck 插件 npm i -g depcheck 2. 運行命令,查看為用到的依賴 npx depcheck depcheck 3. 查詢到所有為用到的依賴 E:\Project>depcheck Unused dependencies * riophae/vue-treeselect * codemirror * connect * qs * sortablejs * vue-count-t…

猿輔導集團推首個教育AI范式小猿AI 聚焦家校應用場景發布3款新品

近兩年,通用大模型呈爆發式發展,垂類AI遭遇“技術平替”危機。 4月15日,猿輔導集團在“小猿AI暨智能硬件戰略發布會”上,正式推出首個教育AI范式——“小猿AI”,并發布覆蓋家校兩端的“軟件應用智能終端通識課程”三位…

英語單詞 list 11

前言 這一個 list 是一些簡單的單詞。感覺這個瀏覽單詞的方法比較低效,所以準備每天最多看一個 list ,真要提升英語水平,感覺還是得直接做閱讀理解題。就像我們接觸中文閱讀材料一樣,當然光知道這個表面意思還不夠,還…