其實opencv中內建了這個二值化演算法,在threshold方法中
double threshold( inputarray src, outputarray dst, double thresh, double maxval, int type );
/*閾值型別有如下幾種:
0:二進位制閾值化--thresh_binary
1:反二進位制閾值化--thresh_binary_inv
2:截斷閾值化:大於該閾值的畫素點被設定為該閾值--thresh_trunc
3:閾值化為0:低於閾值被設定為0--thresh_tozero
4:反閾值化為0:超過閾值被設定為0--thresh_tozero_inv
8:otsu閾值化--cv_thresh_otsu
*/
引數說明:
第乙個引數:inputarray型別的src,輸入陣列,填單通道,8位或32位浮點型別mat即可。即為輸入影象。
第二個引數:函式運算後的結果存放在這。即為輸出影象(與輸入影象同樣的尺寸和型別)。
第三個引數:double型別的thresh,閾值的具體值。根據需要自行設定。
第四個引數:表示預設最大值,使用thresh_binary或thresh_binary_inv型別。
第五個引數:int型別的type,表示閾值化處理的型別。
otsu的c++實現,需要參考公式 :
效果如下:
float wb, wf; //比重. wb-背景部分; wf-前景部分
float u0_temp, u1_temp, u0, u1; //平均值
float delta_temp; //存放臨時方差
double delta_max = 0.0; //初始化最大類間方差
for (int i = 0; i < 256; i++)
//前景部分
else
}//------------分別計算各類的平均值------------
u0 = u0_temp / wb;
u1 = u1_temp / wf;
//-----------計算最大類間方差------------
delta_temp = (float)(wb*wf*pow((u0 - u1), 2));//形如pow(x,y);其作用是計算x的y次方。
//------------依次找到最大類間方差下的閾值------------
if (delta_temp > delta_max)
}//計算結束
return threshold; //返回otus計算出的閾值
}
ITK基礎 一 二值化分割
itk 全稱為 insight toolkit 是一款開源 跨平台 用於影象分析工具包,開發遵循極限程式設計,主流使用語言為 c 但目前開發團隊已經提供了面向 python 的介面。itk 內部封裝了許多優秀演算法。itk 可用於影象處理 配準 分割等領域,處理影象維度面向二維 三維或者更高維度 原...
氣泡排序的優化 分割字串
氣泡排序在學習c語言時就學習過,但是只是學會了怎麼用,具體對於氣泡排序的優化演算法,一時間無從下手。後來想了想,從人類的邏輯思維下手,如果遇到排好序的數列,直接跳出本次迴圈,能在一定程度上優化 usr bin python3 l2 n int input pls input how many num...
索引優化分析(二)
explain sql語句 explain select from table name查詢結果如下 1 id selectct 查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序 查詢順序 a id相同,執行順序由上至下 b id不同,如果是子查詢,id的序號會遞增,id值越...