直方圖均衡化—matlab實現
阿新 • • 發佈:2019-01-03
步驟:
統計原影象素每個畫素的個數
統計原影象<每個灰度級的畫素的累積個數
家裡灰度級得對映規則
將原圖每個畫素點的灰度對映到新圖
程式碼:
clear all I=imread('1.jpg'); %讀入JPG彩色影象檔案 imshow(I) %顯示出來 title('輸入的彩色JPG影象') I_gray = rgb2gray(I); %灰度化後的資料存入陣列 imwrite(I_gray,'1_gray.bmp'); %儲存灰度影象 figure,imshow(I_gray); title('灰度圖') [height,width]=size(I_gray); %測量影象尺寸引數 p=zeros(1,256); %預建立存放灰度出現概率的向量 for i=1:height for j=1:width p(I_gray(i,j) + 1) = p(I_gray(i,j) + 1) + 1; end end s=zeros(1,256); s(1)=p(1); for i=2:256 s(i)=p(i) + s(i-1); %統計影象中<每個灰度級畫素的累積個數,s(i):0,1,```,i-1 end for i=1:256 s(i) = s(i)*256/(width*height); %求灰度對映函式 if s(i) > 256 s(i) = 256; end end %影象均衡化 I_equal = I; for i=1:height for j=1:width I_equal(i,j) = s( I(i,j) + 1); end end figure,imshow(I_equal) %顯示均衡化後的影象 title('均衡化後圖像') imwrite(I_equal,'1_equal.bmp');
實現結果如下:
原圖 灰度圖 均衡化後
親們,是這樣麼?!是這樣麼?!!腫麼會是這樣的呢~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~是不是錯了?彩色影象的均值化到底腫麼弄涅~~
對於灰度圖的均衡化,
%直方圖均衡化 clear; I = imread('mm_gaussian_gray.bmp'); [height,width] = size(I); figure subplot(221) imshow(I)%顯示原始影象 subplot(222) imhist(I)%顯示原始影象直方圖 %進行畫素灰度統計; s = zeros(1,256);%統計各灰度數目,共256個灰度級 for i = 1:height for j = 1: width s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%對應灰度值畫素點數量增加一 end end %計算灰度分佈密度 p = zeros(1,256); for i = 1:256 p(i) = s(i) / (height * width * 1.0); end %計算累計直方圖分佈 c = zeros(1,256); c(1) = p(1); for i = 2:256 c(i) = c(i - 1) + p(i); end %累計分佈取整,將其數值歸一化為1~256 c = uint8(255 .* c + 0.5); %對影象進行均衡化 for i = 1:height for j = 1: width I(i,j) = c(I(i,j)+1); end end subplot(223) imshow(I)%顯示均衡化後的影象 subplot(224) imhist(I)%顯顯示均衡化後的影象的直方圖