日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

自适应阈值算法(大津阈值法)

發(fā)布時(shí)間:2025/3/11 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自适应阈值算法(大津阈值法) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最大類間方差法是由日本學(xué)者大津于1979年提出的,是一種自適應(yīng)的閾值確定的方法,又叫大津法,簡(jiǎn)稱OTSU。它是按圖像的灰度特性,將圖像分成背景和目標(biāo)2部分。背景和目標(biāo)之間的類間方差越大,說(shuō)明構(gòu)成圖像的2部分的差別越大,當(dāng)部分目標(biāo)錯(cuò)分為背景或部分背景錯(cuò)分為目標(biāo)都會(huì)導(dǎo)致2部分差別變小。因此,使類間方差最大的分割意味著錯(cuò)分概率最小。對(duì)于圖像I(x,y),前景(即目標(biāo))和背景的分割閾值記作T,屬于前景的像素點(diǎn)數(shù)占整幅圖像的比例記為ω0,其平均灰度μ0;背景像素點(diǎn)數(shù)占整幅圖像的比例為ω1,其平均灰度為μ1。圖像的總平均

灰度記為μ,類間方差記為g。假設(shè)圖像的背景較暗,并且圖像的大小為M×N,圖像中像素的灰度值小于閾值T的像素個(gè)數(shù)記作N0,像素灰度大于閾值T的像素個(gè)數(shù)記作N1,則有:

      ω0=N0/ M×N ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (1)

      ω1=N1/ M×N ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)

      N0+N1=M×N ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (3)

      ω0+ω1=1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(4)

      μ=ω0μ0+ω1μ1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (5)

      g=ω0(μ0-μ)2+ω1(μ1-μ)2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(6)



將式(5)代入式(6),得到等價(jià)公式:

? ? ? ? ? ? g=ω0ω1(μ0-μ1)^2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(7)

采用遍歷的方法得到使類間方差最大的閾值T,即為所求。

由于,當(dāng)圖像在254或255灰度值上沒(méi)有像素點(diǎn)時(shí),求平均灰度時(shí)會(huì)出現(xiàn)0/0的情況,為避免拋出異常,可在當(dāng)出現(xiàn)前景像素?cái)?shù)為零時(shí),跳出循環(huán)。

以下是c++代碼(用到OpenCV):

  • int otsuThreshold(IplImage* img)
  • {
  • int T = 0;//閾值
  • int height = img->height;
  • int width = img->width;
  • int step = img->widthStep;
  • int channels = img->nChannels;
  • uchar* data = (uchar*)img->imageData;
  • double gSum0;//第一類灰度總值
  • double gSum1;//第二類灰度總值
  • double N0 = 0;//前景像素?cái)?shù)
  • double N1 = 0;//背景像素?cái)?shù)
  • double u0 = 0;//前景像素平均灰度
  • double u1 = 0;//背景像素平均灰度
  • double w0 = 0;//前景像素點(diǎn)數(shù)占整幅圖像的比例為ω0
  • double w1 = 0;//背景像素點(diǎn)數(shù)占整幅圖像的比例為ω1
  • double u = 0;//總平均灰度
  • double tempg = -1;//臨時(shí)類間方差
  • double g = -1;//類間方差
  • double Histogram[256]={0};// = new double[256];//灰度直方圖
  • double N = width*height;//總像素?cái)?shù)
  • for(int i=0;i<height;i++)
  • {//計(jì)算直方圖
  • for(int j=0;j<width;j++)
  • {
  • double temp =data[i*step + j * 3] * 0.114 + data[i*step + j * 3+1] * 0.587 + data[i*step + j * 3+2] * 0.299;
  • temp = temp<0? 0:temp;
  • temp = temp>255? 255:temp;
  • Histogram[(int)temp]++;
  • }
  • }
  • //計(jì)算閾值
  • for (int i = 0;i<256;i++)
  • {
  • gSum0 = 0;
  • gSum1 = 0;
  • N0 += Histogram[i];
  • N1 = N-N0;
  • if(0==N1)break;//當(dāng)出現(xiàn)前景無(wú)像素點(diǎn)時(shí),跳出循環(huán)
  • w0 = N0/N;
  • w1 = 1-w0;
  • for (int j = 0;j<=i;j++)
  • {
  • gSum0 += j*Histogram[j];
  • }
  • u0 = gSum0/N0;
  • for(int k = i+1;k<256;k++)
  • {
  • gSum1 += k*Histogram[k];
  • }
  • u1 = gSum1/N1;
  • //u = w0*u0 + w1*u1;
  • g = w0*w1*(u0-u1)*(u0-u1);
  • if (tempg<g)
  • {
  • tempg = g;
  • T = i;
  • }
  • }
  • return T;
  • }


  • 總結(jié)

    以上是生活随笔為你收集整理的自适应阈值算法(大津阈值法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。