MATLAB實現直方圖均衡化與規定化
阿新 • • 發佈:2019-01-10
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
%輸入為一引數實現影象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