2 預處理 二值化處理

2021-09-26 04:47:07 字數 2140 閱讀 9123

閾值化操作在影象處理中是一種常用的演算法,比如影象的二值化就是一種最常見的一種閾值化操作。opencv2和opencv3中提供了直接閾值化操作cv::threshold()和自適應閾值化操作cv::adaptivethreshold()兩種閾值化操作介面,這裡將對這兩個介面進行介紹和對比。

對灰度影象進行處理,設定閾值,在閾值中的畫素值將變為1(白色部分),閾值為的將變為0(黑色部分)。

(1)先對彩色影象進行灰度化

//img為原圖,imggray為灰度圖

cvtcolor(img, imggray, cv_bgr2gray);

(2)對灰度圖進行二值化

//imggray為灰度圖,result為二值影象

//100~255為閾值,可以根據情況設定

//在閾值中的畫素點將變為0(白色部分),閾值之外的畫素將變為1(黑色部分)。

threshold(imggray, result, 100, 255, cv_thresh_binary);

1、直接閾值化——cv::threshold()

閾值化操作的基本思想是,給定乙個輸入陣列和乙個閾值,陣列中的每個元素將根據其與閾值之間的大小發生相應的改變。opencv3中支援這一操作的介面是cv::threshold(),具體呼叫方法如下:

double cv::threshold(

cv::inputarray src, // 輸入影象

cv::outputarray dst, // 輸出影象

double thresh, // 閾值

double maxvalue, // 向上最大值

int thresholdtype // 閾值化操作的型別 

);如下表所示,每一種閾值化操作型別,對應著一種源影象上每乙個畫素點與閾值thresh之間比較操作。根據源影象畫素和閾值之間的大小關係,目標畫素可能被置為0、原畫素值、或者設定的最大值maxvalue。

下圖將會幫助大家理解不同的閾值化型別所表示的確切含義。

void test_threshold()

實用上面的**進行閾值化處理,原圖和五種不同方式閾值化的結果分別如下:

另外,在opencv3中cv::threshold()函式還支援一種特殊的閾值化操作方式,即otsu演算法。該演算法的主要思想是,在進行閾值化時,考慮所有可能的閾值,分別計算低於閾值和高於閾值畫素的方差,使下式最小化的值作為閾值:

其中,兩類畫素方差的權值由兩類畫素的個數決定。這種閾值化的結果相對來說比較理想,可以避免尋找合適閾值的操作,但是這種方式運算量較大,費時。處理的結果如下:

但是,直接閾值化操作是一種一刀切的方式,對於亮度分布差異較大的影象,常常無法找到乙個合適的閾值。如下所示,對棋盤格進行二值化操作,由於影象右上角區域和影象下部的亮度差異較為大,無法找到乙個合適的閾值,將棋盤上的所有棋盤格給區分開來。

針對於上述情況,我們需要一種改進的閾值化演算法,即自適應閾值化。

2、自適應閾值化——cv::adaptivethreshold()

自適應閾值化能夠根據影象不同區域亮度分布的,改變閾值,具體呼叫方法如下:

void cv::adaptivethreshold(

cv::inputarray src, // 輸入影象

cv::outputarray dst, // 輸出影象

double maxvalue, // 向上最大值

int adaptivemethod, // 自適應方法,平均或高斯

int thresholdtype // 閾值化型別

int blocksize, // 塊大小

double c // 常量

);cv::adaptivethreshold()支援兩種自適應方法,即cv::adaptive_thresh_mean_c(平均)和cv::adaptive_thresh_gaussian_c(高斯)。在兩種情況下,自適應閾值t(x, y)。通過計算每個畫素周圍bxb大小畫素塊的加權均值並減去常量c得到。其中,b由blocksize給出,大小必須為奇數;如果使用平均的方法,則所有畫素周圍的權值相同;如果使用高斯的方法,則(x,y)周圍的畫素的權值則根據其到中心點的距離通過高斯方程得到。

測試**如下:

void test_adaptive_threshold()

我們分別使用了平均和高斯兩種自適應方法,結果如下:

資料預處理 無量綱化處理

無量綱化,也稱為資料的規範化,是指不同指標之間由於存在量綱不同致其不具可比性,故首先需將指標進行無量綱化,消除量綱影響後再進行接下來的分析。無量綱化方法有很多,但是從幾何角度來說可以分為 直線型 折線型 曲線形無量綱化方法。直線型無量綱化方法是指指標原始值與無量綱化後的指標值之間呈現線性關係,常用的...

23 資料預處理之資料離散化處理

pandas.cut x,bins,right true,labels x 資料 bins 離散化的資料,或者切分的區間 labels 離散化後各個類別的標籤 right 是否包含區間右邊的值 等寬分箱 df age bin pd.cut df age new 5,labels range 5 不加...

資料預處理 缺失值處理

資料中的缺失值是個非常棘手的問題,有很多文獻都致力於解決這個問題。資料缺失的含義是 假設有 n n 個樣本,每個樣本20個特徵。但在一些樣本中出於某種原因某個特徵無效,則就構不成乙個完整的樣本。對於這樣的問題,有些情況下是不能直接將其拋棄的,對其進行挽救就是缺失值處理 1 使用可用特徵的均值來填補缺...