OTSU演算法介紹及openCV的C 實現

2021-08-21 11:03:51 字數 1941 閱讀 8351

otsu演算法也稱最大類間差法,有時也稱之為大津演算法。前景與背景影象的類間方差最大。因方差是灰度分布均勻性的一種度量,背景和前景之間的類間方差越大,說明構成影象的兩部分的差別越大,當部分前景錯分為背景或部分背景錯分為前景都會導致兩部分差別變小。因此,使類間方差最大的分割意味著錯分概率最小。ostu方法可以形象地理解為:求取直方圖有兩個峰值的影象中那兩個峰值之間的低谷值 t

屬於前景的畫素點數占整幅影象的比例記為w0,其平均灰度μ0;

背景畫素點數占整幅影象的比例為w1,其平均灰度為μ1。

影象的總平均灰度記為μ:

μ=w0u0+w1u1.

類間方差記為delta:

delta=w0(u0-u)^2+w1(u1-u)^2

1、統計灰度級中每個畫素在整幅影象中的個數

2、計算每個畫素在整幅影象的概率分布

3、對灰度級進行遍歷搜尋,計算當前灰度值下前景背景類間概率

4、通過目標函式計算類間方差下對應的閾值(選擇最大方差對應的閾值)

我是分割線

**:

#include "opencv2/opencv.hpp"

#include "opencv2/highgui/highgui.hpp"

#include

#include

using

namespace

std;

using

namespace cv;

#define gamma 3

//otsu 函式實現

int otsu(mat srcimage)

//統計灰度集中每個畫素在整幅影象中的個數

for (int i = 0; i < nrows; i++)

}//計算每個灰度級佔影象中的概率分布

for (int i = 0; i < 256; i++)

//遍歷灰度級【0,255】,計算出最大類間方差下的閾值

float w0, w1, u0_temp, u1_temp, u0, u1, delta_temp;

double delta_max = 0.0;

for (int i = 0; i < 256; i++)

//前景部分

else

}//計算兩個分類的平均灰度

u0 = u0_temp / w0;

u1 = u1_temp / w1;

//依次找到最大類間方差下的閾值

delta_temp = (float)(w0*w1*pow((u0 - u1), 2)); //前景與背景之間的方差(類間方差)

if (delta_temp > delta_max)

}return threshold;

}int main()

mat srcgray;

cvtcolor(srcimage, srcgray, cv_rgb2gray);

imshow("srcgray", srcgray);

//呼叫otsu演算法得到影象

int otsuthreshold = otsu(srcgray);

cout

<< otsuthreshold << endl;

//定義輸出結果影象

mat otsuresultimage = mat::zeros(srcgray.rows, srcgray.cols, cv_8uc1);

//利用得到的閾值進行二值化操作

for (int i = 0; i < srcgray.rows; i++)

else

//cout <<(int)otsuresultimage.at(i, j) << endl;}}

imshow("otsuresultimage", otsuresultimage);

waitkey(0);

return

0;}

用OpenCV實現Otsu演算法

最近在學習影象分割反面的知識,在岡薩雷斯的那本書上看到otsu演算法,身邊的同學都是用matlab來實現這個演算法。我覺得matlab寫得話,但是 的效率應該不會高。於是又惡補了一些opencv的一些基本知識,然後看了augusdi的部落格,分析了一下他的 並附上,第二份 是來自某一位大牛的 寫得更...

OpenCv 中Otsu 演算法實現

大津法或最大類間方差法 使用的是聚類的思想,把影象的灰度數按灰度級分成2個部分,使得兩個部分之間的灰度值差異最大,每個部分之間的灰度差異最小,通過方差的計算來尋找乙個合適的灰度級別來劃分。所以可以在二值化的時候採用otsu演算法來自動選取閾值進行二值化。otsu演算法被認為是影象分割中閾值選取的最佳...

otsu閾值分割演算法原理 閾值分割 Otsu法

演算法實現 不呼叫函式 include include using namespace std using namespace cv 實現灰度直方圖的繪製 void drawpicture mat inpicture,mat outpicture ma hist const int bins 256...