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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

大津阈值法原理_ostu阈值分割

發布時間:2023/12/19 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 大津阈值法原理_ostu阈值分割 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

具體的公式推導參見岡薩雷斯 《數字圖像處理》

Otsu方法又稱最大類間方差法,通過把像素分配為兩類或多類,計算類間方差,當方差達到最大值時,類分割線(即灰度值)就作為圖像分割閾值。Otsu還有一個重要的性質,即它完全基于對圖像直方圖進行計算,這也使他成為最常用的閾值處理算法之一。

算法步驟如下:

Otsu只有在直方圖呈現雙峰的時候才會有一個很好的效果,在直方圖單峰或多峰的情況下效果不是很好,那就需要通過實際情況來選取其他的方法來得到預期的分割效果。

代碼如下;

//返回閾值的大津閾值法
double Otsu_threshold(const cv::Mat& InputImage)
{ 
	
cv::Mat SrcImage = InputImage.clone();
CV_Assert(SrcImage.type() == CV_8UC1);
int rows = SrcImage.rows;
int cols = SrcImage.cols;
const int L = 256;
int N = rows * cols;					//灰度圖大小(元素個數)
int n_i[L] = { 
 0 };						//灰度直方圖
for (int i = 0; i < rows; ++i)
{ 

uchar* p = SrcImage.ptr<uchar>(i);
for (int j = 0; j < cols; ++j)
n_i[p[j]]++;
}
double pn_i[L];							//概率灰度直方圖
for (int i = 0; i < L; ++i)
{ 

pn_i[i] = (double)n_i[i] / N;
}
//全局均值和全局方差
cv::Mat mat_mean, mat_stddev;
double gray_mean, gray_sigma;
cv::meanStdDev(SrcImage, mat_mean, mat_stddev);
gray_mean = mat_mean.at<double>(0, 0);			//m_G
//全局方差是用來計算類的可分離測度
gray_sigma = mat_stddev.at<double>(0, 0) * mat_stddev.at<double>(0, 0);
//遍歷所有灰度級,計算類間方差
std::vector<double>sigma_ks(L);
for (int k = 0; k < L; ++k)
{ 

double p1 = 0.0;				//p1類發生概率
double m_k = 0.0;				//高達k階累計平均灰度
for (int i = 0; i <= k; ++i)
{ 

p1 += pn_i[i];
m_k += i * pn_i[i];
}
if (p1 == 0.0 || (1 - p1) == 0.0)					//分母不能為0
sigma_ks[k] = 0.0;
else
sigma_ks[k] = (gray_mean * p1 - m_k) * (gray_mean * p1 - m_k) / (p1 * (1 - p1));
}
double max_Sigma_k = 0.0;
std::vector<int>maxval_Ts;
double Threshold_T = 0;									//最終輸出的閾值T
//找類間方差最大值
for (int i = 0; i < sigma_ks.size(); ++i)
{ 

if (sigma_ks[i] > max_Sigma_k)
max_Sigma_k = sigma_ks[i];
}
//找極大值對應的所有灰度值
for (int i = 0; i < sigma_ks.size(); ++i)
{ 

if (abs(max_Sigma_k - sigma_ks[i]) < 1e-8)
maxval_Ts.push_back(i);
}
//如果極大值點不唯一,那么取對應各個極大值的各個k的平均值來得到最終閾值threshold_T
for (int i = 0; i < maxval_Ts.size(); ++i)
Threshold_T += maxval_Ts[i];
return Threshold_T / maxval_Ts.size();
}
//-----------------test--------------------//
int main()
{ 

std::string path = "F:\\NoteImage\\Lena.jpg";
cv::Mat src = imread(path, cv::IMREAD_GRAYSCALE);
if (!src.data) { 

std::cout << "Could not open or find the image" << std::endl;
return -1;
}
cv::Mat dst;
//對比一下opencv官方計算結果(顯然結果是相同的)
double thres1 = cv::threshold(src, dst, 0, 255, cv::THRESH_OTSU);
double thres2 = Otsu_threshold(src);
std::cout << "opencv = " << thres1 << " my = " << thres2;
cv::waitKey(0);
return 0;
}

處理結果:


與本博文有關的其他博文:
mask_otsu

自適應閾值Canny

總結

以上是生活随笔為你收集整理的大津阈值法原理_ostu阈值分割的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩视频免费在线观看 | 少妇人妻偷人精品一区二区 | 欧亚乱熟女一区二区在线 | 99国产精品99久久久久久粉嫩 | 黄色片在线视频 | 日本强好片久久久久久aaa | 天天插插| 婷婷久久丁香 | 精品国产九九九 | 男人天堂伊人 | 天天干精品 | 91夫妻视频 | 久久国内偷拍 | 久久久亚洲国产 | 亚洲精品一区二区三区四区 | 久久露脸国语精品国产 | 国产成人超碰人人澡人人澡 | 成人免费一区二区 | 日本做爰三级床戏 | 色妞欧美| av色在线观看 | 国产大屁股喷水视频在线观看 | 少妇搡bbbb搡bbb搡打电话 | 日韩欧美中文字幕在线播放 | 亚洲AV综合色区国产精品天天 | www.xxx国产| 伊人中文网 | 秋霞午夜鲁丝一区二区老狼 | 亚洲第一激情 | zzjizzji亚洲日本少妇 | 成人区视频 | 中文字幕22页 | 天天透天天干 | 欧美vieox另类极品 | 亚洲乱妇老熟女爽到高潮的片 | 熟妇的味道hd中文字幕 | av秋霞| 亚洲精选国产 | 欧美性猛交99久久久久99按摩 | 亚洲iv一区二区三区 | 亚洲精品天天 | 美女伦理水蜜桃4 | 亚洲一区在线不卡 | 男女69视频 | 日本黄色免费网址 | 婷婷激情综合网 | 欧美男人天堂 | 国产又粗又猛又色又 | 激情欧美一区二区免费视频 | 理论片中文字幕 | 日韩精品第一页 | 久久国内免费视频 | 免费二区| 亚洲精品字幕在线 | 一边吃奶一边摸做爽视频 | 久久国色 | 亚洲春色在线 | 色婷婷777 | 国产日韩欧美中文字幕 | 国产精品国产三级国产专区53 | av免费观看网址 | 嫩草私人影院 | 日本一区二区免费高清视频 | 午夜成人影视 | 美女四肢被绑在床扒衣 | 射一射| 国产一区二区三区视频在线 | av资源免费观看 | 成人二区三区 | 一本色道久久综合亚洲精品 | 欧美日本韩国在线 | 欧美精品久久久久久久自慰 | 青青草中文字幕 | 国产精品一二三区在线观看 | 国产精品久久久久久免费播放 | 久久avav| 亚洲综合婷婷 | 伊人一区| 91黄漫| 久久精品7 | 亚洲最新在线观看 | 91精产品一区观看 | 大伊人久久 | 国产50页| 亚洲啪| 被扒开腿一边憋尿一边惩罚 | 亚洲福利社 | 国产资源久久 | 久久久久久久久99 | 欧美在线观看免费高清 | 成人免费无遮挡无码黄漫视频 | 亚洲免费色图 | 亚洲综合在线一区 | 黄色一级网站 | 亚洲青草视频 | 欧美中文字幕在线观看 | 中文字幕av影片 | 亚洲一级av无码毛片精品 | 国产精品男同 |