对数变换 幂律变换 直方图均衡以及局部均衡
clc;
clear all;
close all;
%对数变换以及幂律变换(伽马=0.1和伽马=5)
IM=imread('Fig0310(a)(Moon Phobos).tif');
IM=im2double(IM);
[H,W,C]=size(IM);
IM1=zeros(H,W,C);
IM2=zeros(H,W,C);
IM3=zeros(H,W,C);
for x=1:1:H
for y=1:1:W
for z=1:1:C
IM1(x,y,z)=log(1+IM(x,y,z));
IM2(x,y,z)=(IM(x,y,z))^0.1;
IM3(x,y,z)=(IM(x,y,z))^5;
end
end
end
figure(1);
subplot(121)
imshow(IM);
title('原图像');
subplot(122)
imshow(IM1);
title('对数变换后');
figure(2);
subplot(131)
imshow(IM);
title('原图像');
subplot(132)
imshow(IM2);
title('幂律变换(0.1)后');
subplot(133)
imshow(IM3);
title('幂律变换(5)后');
直方图均衡函数
function IM1=junheng(IM)
[H,L]=size(IM);
T=linspace(0,255,256);
J=zeros(1,256);
HL=H*L;
t=zeros();
%统计灰度等级
for z=1:256
t=find(IM==T(z));
J(z)=length(t);
t=zeros();
end
%计算均衡初始化
P=zeros(1,256);
S=zeros(1,256);
P=J./HL;
S(1)=255*P(1);
for a=2:1:256%计算均衡后的灰度值
S(a)=S(a-1)+255*P(a);
end
for b=1:1:256%四舍五入
if S(b)-floor(S(b))-0.5>=0
S(b)=floor(S(b))+1;
else if S(b)==0
S(b)=S(b);
else
S(b)=floor(S(b));
end
end
end
%原图像的灰度值替换为均衡后
for c=1:1:H
for d=1:1:L
for e=1:256
if IM(c,d)==T(e)
IM1(c,d)=S(e);
end
end
end
end
end
以5x5的矩阵为单位做局部直方图均衡
clc;
clear all;
close all;
IM=imread('Fig0308(a)(pollen).tif');
[H,L]=size(IM);
IM1=zeros(H,L);
A=zeros(5,5);%以5*5的小矩阵做直方图均衡
i=0;j=0;
while(j<=99)
while(i<=99)
for a=1+5*i:5+5*i
for b=1+5*j:5+5*j
A(a-5*i,b-5*j)=IM(a,b);
end
end
IM1(a-4:a,b-4:b)=junheng(A);
i=i+1;
end
i=0;
j=j+1;
end
IM1=uint8(IM1);
subplot(121)
imshow(IM);
% imhist(IM);
title('原图像');
subplot(122)
imshow(IM1);
% imhist(IM1);
title('局部直方图均衡后');