otsu自適應閾值選取演算法作為一種經典的閾值分割演算法,在影象領域有廣泛的應用。在一維otsu演算法上發展而來的二維otsu演算法因為計算時間複雜度高而制約了其應用。通過消除二維自適應閾值演算法中的冗餘計算,用迭代的方式得到查詢表,從而大大的提高了二維閾值計算的速度。
實現的**:
// 二維otsu演算法實現.cpp : 定義控制台應用程式的入口點。
#include "stdafx.h"
#include #include #include #include #include #include#include#include "math.h"
int otsu2d(iplimage * src)
iplimage * temp = cvcreateimage(cvgetsize(src),8,1);
cvsmooth(src,temp,cv_blur,3,0);
for (i = 0;i < height;i++)//計算直方圖 }
double p_histogram[256][256];
for (i = 0; i < 256;i++)//直方圖歸一化
for(j = 0; j < 256;j++)
p_histogram[i][j] = (histogram[i][j]*1.0)/(pixel*1.0);
double pst_0[256][256];//pst_0用來儲存概率分布情況
pst_0[0][0] = p_histogram[0][0];
for(i = 0;i < 256;i++)//計算概率分布情況
for(j = 0;j < 256;j++)
double xst_0[256][256];//儲存x方向上的均值向量
xst_0[0][0] = 0 * pst_0[0][0];
for(i = 0 ; i < 256;i++)//計算x方向上的均值向量
for(j = 0 ; j < 256;j++)
double yst_0[256][256];//儲存y方向上的均值向量
yst_0[0][0] = 0 * pst_0[0][0];
for(i = 0 ; i < 256;i++)//計算y方向上的均值向量
for(j = 0 ; j < 256;j++)
int threshold1;
int threshold2;
double variance = 0.0;
double maxvariance = 0.0;
for(i = 0;i < 256;i++)//計算類間離散測度
for(j = 0;j < 256;j++)
}//printf("%d %d",threshold1,threshold2);
return (threshold1+threshold2)/2;
}int _tmain(int argc, _tchar* argv)
二值化前:
二值化後:
php 二維陣列快速排序演算法
二維陣列排序演算法與一維陣列排序演算法基本理論都是一樣,都是通過比較把小的值放在左變的陣列裡,大的值放在右邊的陣列裡在分別遞迴。class bubble private static function sortt data tem data 0 score leftarray array right...
一維Otsu演算法的原理與實現
1.簡介 一維otsu演算法也叫最大類間方差法,是由日本學者大津 nobuyuki otsu 於1979年提出的,是一種影象灰度自適應閾值的分割演算法,間稱 otsu。2.演算法思想 根據影象灰度值的特性,將影象分成背景和前景2個部分。背景和前景之間的類間方差越大,說明 構成影象的2部分的差別 越大...
二維陣列快速排序
function quick sort array,bykey 1,descorasc 1 left arr quick sort left arr,bykey,descorasc right arr quick sort right arr,bykey,descorasc return array...