長條圖均衡化的演算法和代碼

來源:互聯網
上載者:User

長條圖均衡化演算法分為三個步驟,第一步是統計長條圖每個灰階級出現的次數,第二步是累計歸一化的長條圖,第三步是計算新的像素值。

第一步:

    for(i=0;i<height;i++){
       for(j=0;j<width;j++){
          n[s[i][j]]++;
       }
    }

    for(i=0;i<L;i++){

        p[i]=n[i]/(width*height);

    }

    這裡,n[i]表示的是灰階級為i的像素的個數,L表示的是最大灰階級,width和height分別表示的是原始映像的寬度和高度,所以,p[i]表示的就是灰階級為i的像素在整幅映像中出現的機率(其實就是p[]這個數組儲存的就是這幅映像的歸一化之後的長條圖)。

第二步:

    for(i=0;i<=L;i++){
       for(j=0;j<=i;j++){
          c[i]+=p[j];
       }
    }

    c[]這個數組儲存的就是累計的歸一化長條圖。

第三步:

    max=min=s[0][0];
    for(i=0;i<height;i++){
       for(j=0;j<width;j++){
           if(max<s[i][j]){

               max=s[i][j];

           }else if(min>s[i][j]){

               min=s[i][j];

           }
       }
    }

    找出像素的最大值和最小值。

    for(i=0;i<height;i++){
       for(j=0;j<width;j++){
          t[i][j]=c[s[i][j]]*(max-min)+min;
      }
    }

    t[][]就是最終長條圖均衡化之後的結果。

    處理前的圖片:

   

    處理後的圖片:

  

   對於彩色的圖片來說,長條圖均衡化一般不能直接對R、G、B三個分量分別進行上述的操作,而要將RGB轉換成HSV來對V分量進行長條圖均衡化的操作。RGB和HSV相互轉換的方法請見我的另一篇文章,方法已經封裝成了一個函數(不是我封裝的,哈哈),各位可以直接拿去用。

   參考文獻:

   http://zh.wikipedia.org/wiki/%E7%9B%B4%E6%96%B9%E5%9B%BE%E5%9D%87%E8%A1%A1%E5%8C%96

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.