• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)

            2.圖像平滑

              圖像平滑主要是為了消除噪聲。噪聲并不限于人眼所能看的見的失真和變形,有些噪聲只有在進行圖像處理時才可以發(fā)現(xiàn)。圖像的常見噪聲主要有加性噪聲、乘性噪聲和量化噪聲等。圖像中的噪聲往往和信號交織在一起,尤其是乘性噪聲,如果平滑不當(dāng),就會使圖像本身的細(xì)節(jié)如邊界輪廓、線條等變的模糊不清,如何既平滑掉噪聲有盡量保持圖像細(xì)節(jié),是圖像平滑主要研究的任務(wù)。

              一般來說,圖像的能量主要集中在其低頻部分,噪聲所在的頻段主要在高頻段,同時系統(tǒng)中所要提取的汽車邊緣信息也主要集中在其高頻部分,因此,如何去掉高頻干擾又同時保持邊緣信息,是我們研究的內(nèi)容。為了去除噪聲,有必要對圖像進行平滑,可以采用低通濾波的方法去除高頻干擾。圖像平滑包括空域法和頻域法兩大類,在空域法中,圖像平滑的常用方法是采用均值濾波或中值濾波,對于均值濾波,它是用一個有奇數(shù)點的滑動窗口在圖像上滑動,將窗口中心點對應(yīng)的圖像像素點的灰度值用窗口內(nèi)的各個點的灰度值的平均值代替,如果滑動窗口規(guī)定了在取均值過程中窗口各個像素點所占的權(quán)重,也就是各個像素點的系數(shù),這時候就稱為加權(quán)均值濾波;對于中值濾波,對應(yīng)的像素點的灰度值用窗口內(nèi)的中間值代替。實現(xiàn)均值或中值濾波時,為了簡便編程工作,可以定義一個n*n的模板數(shù)組。另外,讀者需要注意一點,在用窗口掃描圖像過程中,對于圖像的四個邊緣的像素點,可以不處理;也可以用灰度值為"0"的像素點擴展圖像的邊緣。下面給出了采用加權(quán)均值濾波的圖像平滑函數(shù)代碼和效果圖:

            void CDibView::OnImagePh()
            {
             CClientDC pDC(this);
             HDC hDC=pDC.GetSafeHdc();//獲取當(dāng)前設(shè)備上下文的句柄;
             SetStretchBltMode(hDC,COLORONCOLOR);
             HANDLE data1handle;
             LPBITMAPINFOHEADER lpBi;
             CDibDoc *pDoc=GetDocument();
             HDIB hdib;
             unsigned char *hData;
             unsigned char *data;
             hdib=pDoc->GetHDIB();
             BeginWaitCursor();
             lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);
             hData=(unsigned char*)FindDIBBits((LPSTR)lpBi);
             pDoc->SetModifiedFlag(TRUE);
             data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight);
             data=(unsigned char*)GlobalLock((HGLOBAL)data1handle);
             AfxGetApp()->BeginWaitCursor();
             int i,j,s,t,ms=1;
             int sum=0,sumw=0;
             int mask[3][3]=,,};//定義的3x3加權(quán)平滑模板;
             for(i=0; ibiHeight; i++)
             for(j=0; jbiWidth; j++)
             {
              sumw=0; sum=0;
              for(s=(-ms); s<=ms; s++)
              for(t=(-ms); t<=ms; t++)     if(((i+s)>=0)&&((j+t)>=0)&&((i+s)biHeight)&&((j+t)biWidth))
             {
              sumw += mask[1+s][1+t];   
              sum+=*(hData+(i+s)*WIDTHBYTES(lpBi->biWidth*8)+(j+t))*mask[1+s][1+t];
              }
              if(sumw==0) sumw=1;
               sum/=sumw;
              if(sum>255)sum=255;
              if(sum<0)sum=0;
              *(data+i*WIDTHBYTES(lpBi->biWidth*8)+j)=sum;
             }
             for( j=0; jbiHeight; j++)
             for(i=0;ibiWidth;i++)  *(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j);
              StretchDIBits (hDC,0,0,lpBi->biWidth,lpBi->biHeight,0,0,
                     lpBi->biWidth,lpBi->biHeight,
                     hData,(LPBITMAPINFO)lpBi,
                     DIB_RGB_COLORS,
                     SRCCOPY);//顯示圖像;
            }

            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖一)

            (a)LENA原圖
            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖二)

            (b)平滑后的效果圖

                                 圖三

              中值或均值平滑有時處理圖像的效果并不是很好,它雖然去除了一定的噪聲,但同時使圖像中的邊緣變的模糊,這主要和所選取的窗口大小有關(guān),為此下面介紹了一種既能保持邊緣清晰又能消除噪聲的方法,其算法如圖四所示:
            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖三)

            (a)
            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖四)

            (b)
            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖五)

            (c)

                             圖 四 圖像平滑模板

              上圖的含義是在圖像中取5*5的區(qū)域,包含點(i,j)的五邊形和六邊形各四個,3*3的區(qū)域一個,計算這九個區(qū)域的標(biāo)準(zhǔn)差和灰度的平均值,取標(biāo)準(zhǔn)差最小區(qū)域的灰度平均值作為點(i,j)的灰度。由于該算法的實現(xiàn)代碼和上述代碼大同小異,所以代碼部分就不再贅述。

             3.圖像銳化

              圖像平滑往往使圖像中的邊界、輪廓變的模糊,為了減少這類不利效果的影響,這就需要利用圖像鋭化技術(shù),使圖像的邊緣變的清晰。圖像銳化處理的目的是為了使圖像的邊緣、輪廓線以及圖像的細(xì)節(jié)變的清晰,經(jīng)過平滑的圖像變得模糊的根本原因是因為圖像受到了平均或積分運算,因此可以對其進行逆運算(如微分運算)就可以使圖像變的清晰。從頻率域來考慮,圖像模糊的實質(zhì)是因為其高頻分量被衰減,因此可以用高通濾波器來使圖像清晰。

              為了要把圖像中間任何方向伸展的的邊緣和輪廓線變得清晰,我們希望對圖像的某種運算是各向同性的。可以證明偏導(dǎo)平方和的運算是各向同性的,既:

            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖六)

              式中( Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖七))是圖像旋轉(zhuǎn)前的坐標(biāo),(Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖八) )是圖像旋轉(zhuǎn)后的坐標(biāo)。梯度運算就是在這個式子的基礎(chǔ)上開方得到的。圖像(x,y)點的梯度值:
            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖九)

              為了突出物體的邊緣,常常采用梯度值的改進算法,將圖像各個點的梯度值與某一閾值作比較,如果大于閾值,該像素點的灰度用梯度值表示,否則用一個固定的灰度值表示。

              我們在對圖像增強的過程中,采用的是一種簡單的高頻濾波增強方法:

            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖十)

              式中f,g分別為銳化前后的圖像, Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖十)是與擴散效應(yīng)有關(guān)的系數(shù)。 Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖十二)表示對圖像f進行二次微分的拉普拉斯算子。這表明不模糊的圖像可以由模糊的圖像減去乘上系數(shù)的模糊圖像拉普拉斯算子來得到。 Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖十三)可以用下面的模板H=,,}來近似。在具體實現(xiàn)時,上述模板H中的各個系數(shù)可以改變, Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖十四)這個系數(shù)的選擇也很重要,太大了會使圖像的輪廓過沖,太小了則圖像銳化不明顯。實驗表明, Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖十四)選取2-8之間往往可以達到比較滿意的效果。下面給出 Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖十四)等于4的情況下的實現(xiàn)代碼和效果圖:

            void CDibView::OnMenuitem32785()
            {
            CClientDC pDC(this);
            HDC hDC=pDC.GetSafeHdc();//獲取當(dāng)前設(shè)備上下文的句柄;
            SetStretchBltMode(hDC,COLORONCOLOR);
            CDibDoc *pDoc=GetDocument();
            HDIB hdib;
            hdib=pDoc->GetHDIB();
            BITMAPINFOHEADER *lpDIBHdr;//位圖信息頭結(jié)構(gòu)指針;
            BYTE *lpDIBBits;//指向位圖像素灰度值的指針;
            lpDIBHdr=( BITMAPINFOHEADER *)GlobalLock(hdib);//得到圖像的位圖頭信息 lpDIBBits=(BYTE*)lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);//獲取圖像像素值
            BYTE* pData1;
            static int a[3][3]=,,};//拉普拉斯算子模板;
            int m,n,i,j,sum;
            int Width=lpDIBHdr->biWidth;
            int Height=lpDIBHdr->biHeight;
            pData1=(BYTE*)new char[WIDTHBYTES(Width*8)*Height];
            file://進行拉普拉斯濾波運算;
            for(i=1;i for(j=1;j {
            sum=0;
            for(m=-1;m<2;m++)
            for(n=-1;n<2;n++) sum+=*(lpDIBBits+WIDTHBYTES(Width*8)*(i+m)+j+n)*a[1+m][1+n];
            if(sum<0) sum=0;
            if(sum>255) sum=255;
            *(pData1+WIDTHBYTES(Width*8)*i+j)=sum;
            }
            file://原始圖像pData減去拉普拉斯濾波處理后的圖像pData1
            for(i=0;i for(j=0;j { sum=(int)(*(lpDIBBits+WIDTHBYTES(Width*8)*i+j)-4*(*(pData1+WIDTHBYTES(Width*8)*i+j)));
            if(sum<0) sum=0;
            if(sum>255) sum=255;
            *(lpDIBBits+WIDTHBYTES(Width*8)*i+j)=sum;
            }
            StretchDIBits (hDC,0,0,lpDIBHdr->biWidth,lpDIBHdr->biHeight,0,0,
            lpDIBHdr->biWidth,lpDIBHdr->biHeight,
            lpDIBBits,(LPBITMAPINFO)lpDIBHdr,
            DIB_RGB_COLORS,
            SRCCOPY);
            }

            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖一)

            (a)LENA原圖
            Visual C++實現(xiàn)數(shù)字圖像增強處理(下)(圖十五)
            (b)拉普拉斯銳化圖

                                圖 五

              本文主要講解了圖像直方圖的基本概念和圖像點處理運算中的增強、平滑、銳化概念和實現(xiàn)算法,并給處理實現(xiàn)代碼和處理效果圖和廣大讀者朋友們交流,希望達到拋磚引玉的作用。

            posted on 2008-09-10 19:22 wrh 閱讀(822) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            <2008年9月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            統(tǒng)計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产婷婷成人久久Av免费高清 | 伊人久久综合热线大杳蕉下载| 久久综合狠狠综合久久综合88 | 久久精品国产亚洲av瑜伽| 久久久久国产一区二区| 亚洲综合精品香蕉久久网| 一本大道久久a久久精品综合| 久久亚洲高清综合| 久久精品国产亚洲AV无码麻豆| 99久久精品免费看国产一区二区三区 | 99久久国产亚洲高清观看2024 | 亚洲色大成网站WWW久久九九| 久久精品国产亚洲一区二区| 伊人久久综合精品无码AV专区| 色噜噜狠狠先锋影音久久| 亚洲国产精品无码久久98| 久久精品无码免费不卡| 99久久国产热无码精品免费| 国内精品伊人久久久影院| 成人午夜精品久久久久久久小说| 亚洲午夜久久久影院| 久久福利资源国产精品999| 久久久久综合中文字幕| 国产精品久久国产精麻豆99网站| 久久精品国产久精国产果冻传媒| 久久久久99精品成人片三人毛片 | 伊人久久大香线蕉综合Av| 国产福利电影一区二区三区,免费久久久久久久精 | 久久成人精品视频| 久久婷婷五月综合97色| 亚洲精品乱码久久久久久蜜桃图片 | 午夜视频久久久久一区 | 久久久久夜夜夜精品国产| 久久99热只有频精品8| 性欧美大战久久久久久久久| 国产精品久久久久蜜芽| 伊人久久亚洲综合影院| 久久人人爽人人爽人人爽| 久久精品国产免费观看三人同眠| 97视频久久久| 久久久久亚洲AV无码麻豆|