二維OTSU演算法快速實現

2021-06-21 12:10:52 字數 1636 閱讀 6297

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...