1.簡介:
一維otsu演算法也叫最大類間方差法,是由日本學者大津(nobuyuki otsu)於2023年提出的,
是一種影象灰度自適應閾值的分割演算法,間稱
otsu。
2.演算法思想:
根據影象灰度值的特性,將影象分成背景和前景2個部分。背景和前景之間的類間方差越大, 說明
構成影象的2部分的差別
越大,當部分前景錯分背景或者背景錯分為前景的時候,會導致
2部分的方差變小。
因此,類間方差最 大意味著錯分概率最小。
3.演算法過程:(1
)對於影象
i(x,y)
,將前景與背景的分割閾值設為t。
(2)將屬於前景的畫素點的個數佔整個影象的比例設為
w0,其平均灰度設為u0。
(3)將屬於背景的畫素點的個數佔整個影象的比例設為w1,其平均灰度設為u1。
(4)影象的總平均灰度設為u,類間方差設為s。
假設的大小為m*n,影象中畫素灰度值小於閾值t的畫素個數記為n0,
畫素灰度大於閾值t的畫素個數記為n1。
則它們之間的關係如下。
4.**實現(opencv3):
#include "opencv.hpp"
#include "imgproc.hpp"
#include "highgui.hpp"
#include "iostream"
#include "core.hpp"
using namespace cv;
using namespace std;
int otsu(mat srcimage); //一維otsu演算法
int main()
//一維otsu演算法
int otsu(mat srcimage)
int height = srcimage.rows; //rows為的行數,相當於高度,對應.y
int width = srcimage.cols; //cols為的列數,相當於寬度,對應.x
long number = height*width; //畫素總數
int t = 0; //otsu演算法閾值
double varvalue = 0; //類間方差中間值
double w1 = 0; //前景畫素點所佔比例
double w2 = 0; //背景畫素點所佔比例
double u1 = 0; //前景平均灰度
double u2 = 0; //背景平均灰度
int histogram[256] = ; //灰度直方圖,下標是灰度值,儲存內容是灰度值對應的畫素點總數。
uchar *data = srcimage.data;
for (int i = 0; i < height; i++) }
for (int i = 1; i < 255 ;i++)//從1開始遍歷,尋找最合適的值
u1 = u1 / w1; //背景畫素平均灰度
w1 = w1 / number; //背景部分畫素點所佔比例
for (int k = i + 1; k < 255; k++)
u2 = u2 / w2; //前景畫素平均灰度
w2 = w2 / number; //前景部分畫素所佔比例
//類間方差計算
double varvaluei = w1*w2*(u1 - u2)*(u1 - u2);
if ( varvaluei>varvalue)
}cout << t<
5.執行結果:
二維OTSU演算法快速實現
otsu自適應閾值選取演算法作為一種經典的閾值分割演算法,在影象領域有廣泛的應用。在一維otsu演算法上發展而來的二維otsu演算法因為計算時間複雜度高而制約了其應用。通過消除二維自適應閾值演算法中的冗餘計算,用迭代的方式得到查詢表,從而大大的提高了二維閾值計算的速度。實現的 二維otsu演算法實現...
Niblack演算法和OTSU演算法的實現
1 otsu演算法是設閾值將影象分割成倆組,一組灰度對應目標,另一組灰度對應背景,則這倆組灰度值的類內方差最小,倆組的類間方差最大。相關公式 g w0 u0 u u0 u w1 u1 u u1 u w0 w1 u0 u1 u0 u1 我們將遍歷最小灰度值到最大灰度值t作為影象的閾值,如果目標點的灰度...
演算法解剖系列 Otsu二值化原理及實現
推導大致過程 對一幅大小為m n 的數字影象 令l 表示灰度級數 ni 表示灰度級為 i 的畫素數,則影象中畫素總數mn n1 n2 n 3 nl pi ni mn,p i 為相對直方圖,即灰度級為 i 出現的概率。則 l i 1p i 1 設閾值t k k,1 k以將影象 分為c1 和c2兩 類,...