日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

二值化图像的欧拉数_Android OpenCV(八):图像二值化

發(fā)布時間:2025/4/5 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二值化图像的欧拉数_Android OpenCV(八):图像二值化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

圖像二值化

簡介

圖像二值化( Image Binarization)就是將圖像上的像素點的灰度值設(shè)置為0或255,也就是將整個圖像呈現(xiàn)出明顯的黑白效果的過程。在數(shù)字圖像處理中,二值圖像占有非常重要的地位,圖像的二值化使圖像中數(shù)據(jù)量大為減少,從而能凸顯出目標(biāo)的輪廓。

原理

圖像的二值化處理就是將圖像上的點的灰度值為0或255,也就是將整個圖像呈現(xiàn)出明顯的黑白效果。即將256個亮度等級的灰度圖像通過適當(dāng)?shù)拈撝颠x取而獲得仍然可以反映圖像整體和局部特征的二值化圖像。在數(shù)字圖像處理中,二值圖像占有非常重要的地位,特別是在實用的圖像處理中,以二值圖像處理實現(xiàn)而構(gòu)成的系統(tǒng)是很多的,要進(jìn)行二值圖像的處理與分析,首先要把灰度圖像二值化,得到二值化圖像,這樣子有利于在對圖像做進(jìn)一步處理時,圖像的集合性質(zhì)只與像素值為0或255的點的位置有關(guān),不再涉及像素的多級值,使處理變得簡單,而且數(shù)據(jù)的處理和壓縮量小。為了得到理想的二值圖像,一般采用封閉、連通的邊界定義不交疊的區(qū)域。所有灰度大于或等于閾值的像素被判定為屬于特定物體,其灰度值為255表示,否則這些像素點被排除在物體區(qū)域以外,灰度值為0,表示背景或者例外的物體區(qū)域。 如果某特定物體在內(nèi)部有均勻一致的灰度值,并且其處在一個具有其他等級灰度值的均勻背景下,使用閾值法就可以得到比較的分割效果。如果物體同背景的差別表現(xiàn)不在灰度值上(比如紋理不同),可以將這個差別特征轉(zhuǎn)換為灰度的差別,然后利用閾值選取技術(shù)來分割該圖像。動態(tài)調(diào)節(jié)閾值實現(xiàn)圖像的二值化可動態(tài)觀察其分割圖像的具體結(jié)果。

API

全局閾值化:threshold

public static double threshold(Mat src, Mat dst, double thresh, double maxval, int type)
  • 參數(shù)一:src,待二值化的多通道圖像,只能是CV_8U和CV_32F兩種數(shù)據(jù)類型
  • 參數(shù)二:dst,二值化后的圖像,與輸入圖像具有相同的尺寸、類型和通道數(shù)
  • 參數(shù)三:thresh,二值化的閾值
  • 參數(shù)四:maxval,二值化過程的最大值,此函數(shù)只在THRESH_BINARY和THRESH_BINARY_INV兩種二值化方法中才使用
  • 參數(shù)五:type,二值化類型

二值化類型

// C++: enum ThresholdTypes public static final intTHRESH_BINARY = 0,THRESH_BINARY_INV = 1,THRESH_TRUNC = 2,THRESH_TOZERO = 3,THRESH_TOZERO_INV = 4,THRESH_MASK = 7,THRESH_OTSU = 8,THRESH_TRIANGLE = 16; bledata-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">

THRESH_OTSU和THRESH_TRIANGLE

這兩種標(biāo)志是獲取閾值的方法,并不是閾值的比較方法的標(biāo)志,這兩個標(biāo)志可以和前面5種標(biāo)志一起使用,例如“THRESH_BINARY| THRESH_OTSU”。前面5種標(biāo)志在調(diào)用函數(shù)時都需要人為的設(shè)置閾值,如果對圖像不了解設(shè)置的閾值不合理,會對處理后的效果造成嚴(yán)重的影響,這兩個標(biāo)志分別表示利用大津法(OTSU)和三角形法(TRIANGLE)結(jié)合圖像灰度值分布特性獲取二值化的閾值,并將閾值以函數(shù)返回值的形式給出。因此如果函數(shù)最后一個參數(shù)設(shè)置了這兩個標(biāo)志中的任何一個,那么函數(shù)第三個參數(shù)thresh將由系統(tǒng)自動給出,但是在調(diào)用函數(shù)的時候仍然不能缺省,只是程序不會使用這個數(shù)值。目前,只有針對CV_8UC1圖像可使用這兩種標(biāo)志位。

大津法(OTSU):最適用于雙波峰

大津法又叫最大類間方差法、最大類間閾值法(OTSU)。它的基本思想是,用一個閾值將圖像中的數(shù)據(jù)分為兩類,一類中圖像的像素點的灰度均小于這個閾值,另一類中的圖像的像素點的灰度均大于或者等于該閾值。如果這兩個類中像素點的灰度的方差越大,說明獲取到的閾值就是最佳的閾值(方差是灰度分布均勻性的一種度量,背景和前景之間的類間方差越大,說明構(gòu)成圖像的兩部分的差別越大,當(dāng)部分前景錯分為背景或部分背景錯分為前景都會導(dǎo)致兩部分差別變小。因此,使類間方差最大的分割意味著錯分概率最小。)。則利用該閾值可以將圖像分為前景和背景兩個部分。而我們所感興趣的部分一般為前景。

三角形法(TRIANGLE):最適用于單個波峰,最開始用于醫(yī)學(xué)分割細(xì)胞等

三角法求閾值最早見于Zack的論文《Automatic measurement of sister chromatid exchange frequency》主要是用于染色體的研究,該方法是使用直方圖數(shù)據(jù),基于純幾何方法來尋找最佳閾值,它的成立條件是假設(shè)直方圖最大波峰在靠近最亮的一側(cè),然后通過三角形求得最大直線距離,根據(jù)最大直線距離對應(yīng)的直方圖灰度等級即為分割閾值,圖示如下:

在直方圖上從最高峰處bmx到最暗對應(yīng)直方圖bmin(p=0)%構(gòu)造一條直線,從bmin處開始計算每個對應(yīng)的直方圖b到直線的垂直距離,知道bmax為止,其中最大距離對應(yīng)的直方圖位置即為圖像二值化對應(yīng)的閾值T。
有時候最大波峰對應(yīng)位置不在直方圖最亮一側(cè),而在暗的一側(cè),這樣就需要翻轉(zhuǎn)直方圖,翻轉(zhuǎn)之后求得值,用255減去即得到為閾值T。擴展情況的直方圖表示如下:

算法步驟

  • 圖像轉(zhuǎn)灰度
  • 計算圖像灰度直方圖
  • 尋找直方圖中兩側(cè)邊界
  • 尋找直方圖最大值
  • 檢測是否最大波峰在亮的一側(cè),否則翻轉(zhuǎn)
  • 計算閾值得到閾值T,如果翻轉(zhuǎn)則255-T
  • 局部閾值化:adaptiveThreshold

    局部自適應(yīng)閾值是根據(jù)像素的鄰域塊的像素值分布來確定該像素位置上的二值化閾值。這樣做的好處在于每個像素位置處的二值化閾值不是固定不變的,而是由其周圍鄰域像素的分布來決定的。亮度較高的圖像區(qū)域的二值化閾值通常會較高,而亮度較低的圖像區(qū)域的二值化閾值則會相適應(yīng)地變小。不同亮度、對比度、紋理的局部圖像區(qū)域?qū)碛邢鄬?yīng)的局部二值化閾值。public static void adaptiveThreshold(Mat src, Mat dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C)
    • 參數(shù)一:src,待二值化的圖像,圖像只能是CV_8UC1數(shù)據(jù)類型
    • 參數(shù)二:dst,二值化后的圖像,與輸入圖像具有相同的尺寸、類型
    • 參數(shù)三:maxValue,二值化的最大值
    • 參數(shù)四:adaptiveMethod,自適應(yīng)閾值算法,分為均值法ADAPTIVE_THRESH_MEAN_C和高斯法ADAPTIVE_THRESH_GAUSSIAN_C這兩種。
    • 參數(shù)五:thresholdType,選擇圖像二值化方法的標(biāo)志,只能是THRESH_BINARY和THRESH_BINARY_INV
    • 參數(shù)六:blockSize,自適應(yīng)確定閾值的像素鄰域大小,一般為3,5,7的奇數(shù)
    • 參數(shù)七:C,從平均值或者加權(quán)平均值中減去的常數(shù),可以為正,也可以為負(fù)

    自適應(yīng)閾值算法

    // C++: enum AdaptiveThresholdTypes public static final intADAPTIVE_THRESH_MEAN_C = 0,ADAPTIVE_THRESH_GAUSSIAN_C = 1; bledata-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">

    操作

    private fun threshold(type: Int) {val ret = Mat()Imgproc.threshold(mGray, ret, 127.toDouble(), 255.toDouble(), type)showMat(ret)title = getTypeName(type) }private fun adaptiveMean() {val ret = Mat()Imgproc.adaptiveThreshold(mGray,ret,255.toDouble(),Imgproc.ADAPTIVE_THRESH_MEAN_C,Imgproc.THRESH_BINARY,55,0.0)showMat(ret)title = "ADAPTIVE_THRESH_MEAN_C" }

    結(jié)果

    源碼

    onlyloveyd/LearningAndroidOpenCV?github.com

    掃碼關(guān)注

    總結(jié)

    以上是生活随笔為你收集整理的二值化图像的欧拉数_Android OpenCV(八):图像二值化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。