1. 程式人生 > >MATLAB實現直方圖均衡化與規定化

MATLAB實現直方圖均衡化與規定化

function [  ] = image_equalization_regulation( ori_image,obj_image)
%輸入為一引數實現影象ori_image的均衡化,輸入為兩引數實現影象ori_image的規定化
%均衡化
A=imread(ori_image);
subplot(1,2,1),imshow(A);title('origine image');
% subplot(2,2,2),imhist(A);
[r,c]=size(A);
[num,n]=imhist(A);
pi=zeros(1,256);
for i=1:256;
    pi(n(i)+1)=num(i)/(r*c);
end
sig_pi=zeros(1,256);
sig_pi(1)=pi(1);
for i=2:256;
    sig_pi(i)=sig_pi(i-1)+pi(i);
end
for i=1:r;
    for j=1:c;
        A(i,j)=fix(255*sig_pi(A(i,j)+1)+0.5);
    end
end
%規定化
if nargin==2
    B=imread(obj_image);
    [row,col]=size(B);
    [num,n]=imhist(B);
    pj=zeros(1,256);
    for i=1:256;
        pj(n(i)+1)=num(i)/(row*col);
    end
    sig_pj=zeros(1,256);
    sig_pj(1)=pj(1);
    for i=2:256;
        sig_pj(i)=sig_pj(i-1)+pj(i);
    end
    for i=1:r;
        for j=1:c;
            ijdiff=abs(sig_pi(A(i,j)+1)-sig_pj);
            A(i,j)=find(ijdiff<=min(ijdiff))-1;
        end
    end
end
subplot(1,2,2),imshow(A);title('new image');
% subplot(2,2,4),imhist(A);
end