<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      多閾值otsu的opencv實(shí)現(xiàn)

       

       

       

      #include <iostream>
      #include<opencv2/opencv.hpp>
      #include<opencv2/photo.hpp>
      using namespace cv;
      using namespace std;
      void inpaint_test()
      {
          Mat img=imread("D:/Qt/MyImage/jingsai_1.jpg",0);
          imshow("original image",img);
          Mat mask=Mat::zeros(img.rows,img.cols,img.type());
          mask(Rect(377,228,(438-377),(269-228)))=1;
          Mat img_c;
          cv::inpaint(img,mask,img_c,3,INPAINT_TELEA);
      
          imshow("clear image",img_c);
          waitKey();
      }
      Mat getHist(const Mat &img)//img必須是單通道圖像,img的概率直方圖
      {
          if(img.channels()!=1)
          {
              cout<<"channels of input image !=1"<<endl;
              exit(1) ;
          }
          int L=256;//灰度級(jí)數(shù)
           Mat hist(1,L,CV_64F,Scalar::all(0));
           int v=0;
          for(int i=0;i<img.rows;i++)
              for(int j=0;j<img.cols;j++)
              {
                  v=img.ptr<uchar>(i)[j];
                  hist.ptr<double>(0)[v]+=1;
              }
          return hist;
      }
      //計(jì)算累積概率分布函數(shù),Mat &pi是概率分布,本函數(shù)可以指定某一灰度范圍內(nèi)(k1~k2)的累積概率
      double getLocAccHist(const Mat&pi,int k1,int k2)
      {
          double P=0;
          for(int k=k1;k<=k2;k++)
          {
              P +=pi.ptr<double>(0)[k];
          }
          return P;
      }
      
      Mat getMeanPerGrayLevel(const Mat& pi)//計(jì)算每個(gè)灰度級(jí)上的像素均值
      {
          int L=256;
          Mat ipi(pi.size(),pi.type(),Scalar::all(0));
      //    m1k.ptr<double>(0)[0]=pi.ptr<double>(0)[0]*0;
          for(int k=1;k<L;k++)
          {
              ipi.ptr<double>(0)[k]=ipi.ptr<double>(0)[(k-1)]+pi.ptr<double>(0)[k]*k;
          }
          return ipi;
      }
      /*計(jì)算某一灰度級(jí)范圍內(nèi)的所有像素灰度均值,下面是參數(shù)說(shuō)明
      k1:灰度級(jí)小端;k2:灰度級(jí)大端;
      hist_img:原圖像的直方圖
      */
      double getMeanvalueOfC(int k1,int k2,const Mat&hist_img)
      {
          int pixTotalNum=0;
          double pixTotalValue=0;
          double mk1k2=0;
          for(int k=k1;k<=k2;k++)
          {
              pixTotalNum +=hist_img.ptr<double>(0)[k];//計(jì)算k1與k2之間所有像素的個(gè)數(shù)
              //計(jì)算k1與k2之間所有像素的灰度值之和
              pixTotalValue +=k*hist_img.ptr<double>(0)[k];
          }
          if(pixTotalNum!=0)
              mk1k2=pixTotalValue/pixTotalNum;
          return mk1k2;
      }
      
      void getOstu2Threshvalue(const Mat&img,int &k11,int &k22)
      {
          Mat hist_img=getHist(img);
          Mat pi=hist_img/(img.rows*img.cols);//1.灰度級(jí)概率分布
          //3.全局均值、全局方差
          Scalar means,stddev;
          meanStdDev(img,means,stddev);
          double mG=means[0];
          //5.計(jì)算m1,第一類(lèi)C1中的像素灰度均值
          int L=256;
      
          double SigmaB2=0;
          for(int k1=1;k1<L-2;k1++)
          {
              for(int k2=k1+1;k2<L-1;k2++)
              {
                  //6.計(jì)算mk,第一類(lèi)C2中的像素灰度均值
                  double m1=getMeanvalueOfC(0,k1,hist_img);
                  double m2=getMeanvalueOfC(k1+1,k2,hist_img);
                  double m3=getMeanvalueOfC(k2+1,L-1,hist_img);
                  //
                  double P1=getLocAccHist(pi,0,k1);
                  double P2=getLocAccHist(pi,k1+1,k2);
                  double P3=getLocAccHist(pi,k2+1,L-1);
                  //7.計(jì)算類(lèi)間方差SigmaB2
                  double temp=saturate_cast<double>(P1*(m1-mG)*(m1-mG)
                                                    +P2*(m2-mG)*(m2-mG)
                                                    +P3*(m3-mG)*(m3-mG));
                  if(SigmaB2<temp)
                  {
                      SigmaB2=temp;
                      k11=k1;
                      k22=k2;
                  }
              }
          }
      }
      Mat  myThreshHold(const Mat&img,int k1,int k2,int v1=0,int v2=90,int v3=255)
      {
          Mat dst(img.size(),img.type(),Scalar::all(0));
          for(int i=0;i<img.rows;i++)
              for(int j=0;j<img.cols;j++)
              {
                  int v=img.ptr<uchar>(i)[j];
                  if(v<=k1)
                      dst.ptr<uchar>(i)[j]=v1;
                  else if(v<=k2)
                      dst.ptr<uchar>(i)[j]=v2;
                  else
                      dst.ptr<uchar>(i)[j]=v3;
              }
          return dst;
      }
      int main()
      {
          Mat img=imread("D:/Qt/MyImage/ch10/Fig1043(a)(yeast_USC).tif",0);
      //    GaussianBlur(img,img,Size(7,7),0);
      //    Mat kernel=(Mat_<int>(3,3)<<-1,-1,-1,
      //                                -1,9,-1,
      //                                -1,-1,-1);
      //    filter2D(img,img,CV_8U,kernel);
          imshow("original image",img);
          int k11,k22;
          getOstu2Threshvalue(img,k11,k22);
          Mat dst=myThreshHold(img,k11,k22);
      
          imshow("binary image",dst);
          waitKey();
      
          return 0;
      }

       

           下面左邊是原圖像,右邊是雙閾值ostu分割后的圖像

                    

       

      posted @ 2025-07-21 13:40  鳳凰_1  閱讀(6)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产亚洲精品第一综合另类无码无遮挡又大又爽又黄的视频 | 亚洲综合色网一区二区三区| 猫咪社区免费资源在线观看| 26uuu另类亚洲欧美日本| 一本无码在线观看| 4480yy亚洲午夜私人影院剧情| 日韩人妻一区二区三区蜜桃视频| 激情视频乱一区二区三区| 日韩中文字幕亚洲精品| 久久道精品一区二区三区| 成av免费大片黄在线观看| 日韩av无码精品人妻系列| 国偷自产一区二区三区在线视频| 中文字幕日本一区二区在线观看| 国内少妇偷人精品免费| 国产成人啪精品视频免费APP | 人妻另类 专区 欧美 制服| 久久精品国产亚洲AⅤ无码| 精品国产一区二区三区蜜臀| 最近中文字幕完整版hd| 无码熟妇人妻av在线电影| 中文字幕无线码中文字幕| 毛葺葺老太做受视频| 欧洲精品码一区二区三区| 亚洲蜜臀av乱码久久| 久久久精品人妻一区二区三区蜜桃| 中文字幕国产精品二区| 国产普通话对白刺激| 亚洲国产大片永久免费看| 麻豆国产传媒精品视频| 白嫩少妇无套内谢视频| 67194熟妇在线直接进入| 国产成人av一区二区三| 51妺嘿嘿午夜福利| 亚洲高清WWW色好看美女| 国内女人喷潮完整视频| 国产亚洲情侣一区二区无| 人人妻一区二区三区| 国产又色又爽又黄的视频在线| 久久国产成人午夜av影院| 最新亚洲av日韩av二区|