三、histeq的原理和用法

本系列文章都是通過自己的學習經驗,以及啃文檔所寫。如需轉載,請註明出處

參考文檔:Image Processing Toolbox™ 6
User’s Guide

 

           作者:joy

          聯繫方式:[email protected]

如果圖像的對比度太差,常用的方法就是灰度直方圖均衡化。在matlab中,能達到這個目的的函數就是histeq.那麼直方圖均衡化的原理是什麼呢?下面就主要講解一下: 

histeq的原理:

[MN]=size(H);

[counts,x]=imhist(H);%H是讀取的圖像,imhist是對圖像直方圖進行統計,其中count,是每個灰度值得個數,x代表灰度值。一般的,x=1:256

location=find(counts~=0);%找到所有像素個數不爲0的灰度級

MinCDF=min(counts(location));%找到包含個數最少的灰度級

for  j=1:length(location)

      CDF=sum(counts(location(1:j)));%計算各個灰度級像素個數累計分佈

      P=find(H==x(location(j)));%找到圖像中等於某個灰度級所有像素點所在位置

      H(P)=(CDF-MinCDF)/(M*N-MinCDF);%%利用灰度換算公式,修改所有位置上的像素值

end

簡單的說,就是將每個灰度值利用一個變換公式替換掉。

簡單的例子:

clc;clear;closeall;

H=imread('pout.tif');figure;subplot(121);imshow(H);%圖像應該是灰度圖,若圖像爲彩色圖,需要對每個通道進行計算

H=im2double(H);%這個是需要注意的地方,一定要變換成double類型

[MN]=size(H);

[counts,x]=imhist(H);%H是讀取的圖像,imhist是對圖像直方圖進行統計,其中count,是每個灰度值得個數,x代表灰度值。一般的,x=1:256

location=find(counts~=0);%找到所有像素個數不爲0的灰度級

MinCDF=min(counts(location));%找到包含個數最少的灰度級

for j=1:length(location)

   CDF=sum(counts(location(1:j)));%計算各個灰度級像素個數累計分佈

   P=find(H==x(location(j)));%找到圖像中等於某個灰度級所有像素點所在位置

   H(P)=(CDF-MinCDF)/(M*N-MinCDF);%%利用灰度換算公式,修改所有位置上的像素值

end

subplot(122);imshow(H)

print(gcf,'-djpeg',['1.jpg']);   % 保存爲jpg格式的圖片。


    如果用histeq就更簡單了:

    clc;clear;closeall;

    H=imread('pout.tif');figure;imshow(H);

    imhist(H);

    B=histeq(H);figure;imshow(B)

    imhist(B)

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章