久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

OTSU算法提取圖像閾值的C語言實現(xiàn) - Steven Wang's Blog

 unununy 2010-05-10

OTSU算法提取圖像閾值的C語言實現(xiàn)

OTSU算法也稱最大類間差法,,有時也稱之為大津算法,被認(rèn)為是圖像分割中閾值選取的最佳算法,,計算簡單,,不受圖像亮度和對比度的影響,因此在 數(shù)字圖像處理上得到了廣泛的應(yīng)用,。它是按圖像的灰度特性,將圖像分成背景和前景兩部分,。背景和前景之間的類間方差越大,說明構(gòu)成圖像的兩部分的差別越大, 當(dāng)部分前景錯分為背景或部分背景錯分為前景都會導(dǎo)致兩部分差別變小。因此,使類間方差最大的分割意味著錯分概率最小,。

設(shè)灰度圖像灰度級是L,,則灰度范圍為[0,L-1],利用OTSU算法計算圖像的最佳閾值為:
t = Max[w0(t) * (u0(t) - u)^2 + w1(t) * (u1(t) - u)^2)]
其中的變量說明:當(dāng)分割的閾值為t時,,w0為背景比例,,u0為 背景均值,w1為前景比例,,u1為前景均值,,u為整幅圖像的均值。
使以上表達(dá)式值最大的t,,即為分割圖像的最佳閾值,。

以下是一段在OpenCV中 實現(xiàn)的C語言程序,即一個使用OTSU算法提取圖像閾值的函數(shù),,輸入?yún)?shù)為一個圖像指針,,返回分割該圖像的最佳閾值。

01 int otsuThreshold(IplImage *frame)
02 {
03     int width = frame->width;
04     int height = frame->height;
05     int pixelCount[GrayScale];
06     float pixelPro[GrayScale];
07     int i, j, pixelSum = width * height, threshold = 0;
08     uchar* data = (uchar*)frame->imageData;
09  
10     for(i = 0; i < GrayScale; i++)
11     {
12         pixelCount[i] = 0;
13         pixelPro[i] = 0;
14     }
15  
16     //統(tǒng)計灰度級中每個像素在整幅圖像中的 個數(shù)
17     for(i = 0; i < height; i++)
18     {
19         for(j = 0;j < width;j++)
20         {
21             pixelCount[(int)data[i * width + j]]++;
22         }
23     }
24      
25     //計算每個像素在整幅圖像中的比例
26     for(i = 0; i < GrayScale; i++)
27     {
28         pixelPro[i] = (float)pixelCount[i] / pixelSum;
29     }
30  
31     //遍歷灰度級[0,255]
32     float w0, w1, u0tmp, u1tmp, u0, u1, u,
33             deltaTmp, deltaMax = 0;
34     for(i = 0; i < GrayScale; i++)
35     {
36         w0 = w1 = u0tmp = u1tmp = u0 = u1 = u = deltaTmp = 0;
37         for(j = 0; j < GrayScale; j++)
38         {
39             if(j <= i)   //背景部 分
40             {
41                 w0 += pixelPro[j];
42                 u0tmp += j * pixelPro[j];
43             }
44             else   //前景部分
45             {
46                 w1 += pixelPro[j];
47                 u1tmp += j * pixelPro[j];
48             }
49         }
50         u0 = u0tmp / w0;
51         u1 = u1tmp / w1;
52         u = u0tmp + u1tmp;
53         deltaTmp =
54             w0 * pow((u0 - u), 2) + w1 * pow((u1 - u), 2);
55         if(deltaTmp > deltaMax)
56         {
57             deltaMax = deltaTmp;
58             threshold = i;
59         }
60     }
61     return threshold;
62 }
--End--
作者:Steven Wang | 可以轉(zhuǎn)載, 轉(zhuǎn)載時務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及版權(quán)聲明

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多