Matlab实现直方图均衡化(基于自定义函数)
生活随笔
收集整理的這篇文章主要介紹了
Matlab实现直方图均衡化(基于自定义函数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Matlalb實現直方圖均衡化
- 直方圖均衡化
- Matlab代碼實現
直方圖均衡化
直方圖均衡化是一種使輸出圖像直方圖近似服從均勻分布的變換算法,其計算步驟如下:
- 列出原始圖像的灰度級fjf_jfj?,j=0,1,…,k,…,L-1,其中L是灰度級的個數。
- 統計各灰度值的像素數目NjN_jNj?, j=0,1,…,k,…,L-1。
- 計算原始圖像直方圖各灰度級的頻度Pj=Njn\frac{Nj}{n}nNj?,j=0,1,2,…,k,…,L-1,其中n為原始圖像總的像素數目。
- 計算累計分布函數C(f)=∑i=0kPj(fj)\displaystyle\sum_{i=0}^{k} P_j(f_j)i=0∑k?Pj?(fj?),j=0,1,2,…,k,…,L-1。
- 應用以下公式計算映射后的輸出圖像的灰度級gig_igi?,i=0,1,…,k,…,P-1,P為輸出圖像灰度級的個數:
gig_igi?=INT[ (gmaxg_{max}gmax?-gming_{min}gmin?)C(f)+gming_{min}gmin?+0.5 ]
式中,INT為取整符號。 - 統計映射后各灰度級的像素數目nin_ini?,i=0,1,…,k,…,P-1。
- 計算輸出圖像直方圖PgP_gPg?(gig_igi?)=nin\frac{n_i}{n}nni??,i=0,1,…,k,…,P-1。
- 用fjf_jfj?和gig_igi?的映射關系修改原始灰度級,從而獲得直方圖近似為均勻分布的輸出圖像。
Matlab代碼實現
Histogram_equalization.m
function [output] = Histogram_equalization(input_image)
if numel(size(input_image)) == 3 %如果圖像為rgb圖像%this is a RGB image%here is just one method, if you have other ways to do the%equalization, you can change the following coder=input_image(:,:,1);v=input_image(:,:,2);b=input_image(:,:,3);r1 = hist_equal(r);v1 = hist_equal(v);b1 = hist_equal(b);output = cat(3,r1,v1,b1);
else %圖像為灰值圖像[output] = hist_equal(input_image);
endfunction [output2] = hist_equal(input_channel)[m,n]=size(input_channel);output2=zeros(m,n);N=zeros(256,1);P=zeros(256,1);C=zeros(256,1);for i=1:m %統計各灰度級個數for j=1:nN(input_channel(i,j)+1)=N(input_channel(i,j)+1)+1;endendfor i=1:256 %計算原始圖像直方圖各灰度級的頻度P(i)=N(i)/(m*n);endC(1)=P(1); %計算累計分布函數for i=2:256C(i)=C(i-1)+P(i);endfor i=1:m %通過映射關系獲得輸出直方圖for j=1:noutput2(i,j)=floor(255*C(input_channel(i,j)+1)+0.5);endendoutput2=uint8(output2);end
end
代碼效果展示
展示代碼 test.m
clc;
clear;
close all;
I = imread('d:\test.jpg');
[J] = Histogram_equalization(I);
subplot(221), imshow(I);
subplot(222), imhist(I);
subplot(223), imshow(J);
subplot(224), imhist(J);
[1] MATLAB數字圖像處理.張德豐.掃描版
總結
以上是生活随笔為你收集整理的Matlab实现直方图均衡化(基于自定义函数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Error #15: Initializ
- 下一篇: Matlab中的lsqcurvefit函