数字图像处理的数学基础及相关运算:点运算
(1)线性点运算:
>> mission(a);
>> a=imread('guet.gif');
figure(1);imshow(a);
b1=a+45;
figure(2);imshow(b1);
>> b2=1.2*a;
>> figure(3);imshow(b2)
>> b3=0.65*a;
>> figure(4);imshow(b3);
>> b4=-double(a)+255;
>> figure(5);imshow(b4);
>> b4=-double(a);
>> figure(5);imshow(b4);
>> b4=-double(a)+100; %b4=(-1)*a+100;对图像求补,注意要将a的类型转化为double
>> figure(5);imshow(b4);
>> b5=(-1)*a+100;
>> figure(6);imshow(b5);
>> b65=(-0.5)*a+100;
>> figure(7);imshow(b65);
>> b65=(-2)*a+100;
>> figure(7);imshow(b65);
>> b65=-double(a)+100;
>> figure(7);imshow(b65);
总结:当灰度变换GST函数为线性时,即:B=f(A)=aA+p,此时的变换称为线性点运算。
显然:当a=1,p!=0时,图像灰度值增强或降低;
当a>1时,对比度增大;
当0<a<1时,对比度减小;
当a<0时,图像亮区域变暗,暗区域变亮,即图像求补。
(2)非线性点运算:,显示图像相对于原图像存在失真,消除这种因动态范围而引起的失真,使用非线性点运算。
变换公式好几个:
∫(B)=A+a*A*(max(A)-A)
例如:∫(x)=(x)+0.06*x.*(255-x)
>> a=imread('guet.gif');
>> figure(1);imshow(a);
>> xlabel('原始图像');
>>
>> x=1:255;
>> y=x+x.*(255-x)/255;
>> figure(2);imshow(y);
>> figure(3);plot(x,y);
>> xlabel('b函数的曲线图');
>> b1=double(a)+0.06*double(a).*(255-double(a));
>> figure(4);imshow(b1);
>> figure(5);imshow(uint8(b1));
(3)直方图的变化:
线性变换只是把图像的直方图拉伸后进行平移,形状基本没改变,超过[0,255]之外的部分都积累在边界上了。
>> clear
>> a=imread('guet.gif');
>> imhist(a);
>> help hist
>> title('原始图像的直方图');
>> b1=1.25*double(a)+45;
>> figure(2);imhist(uint8(b1));
>> title('变换后的直方图');
(4)直方图的均衡化:
将输入图像转化为每一个灰度级上都有相同的像素点(即使输出的直方图平坦,其分布为均匀分布),增强图像整体对比度的效果。
clear
histgram=zeros(1,256);
cdf=zeros(1,256);
[cm,map]=imread('guet.gif');
[a,b]=size(cm);
for i=1:a
for j=1:b
k=cm(i,j);
histgram(k)=histgram(k)+1;
end
end
cdf(1)=histgram(1);
for i=2:256
cdf(i)=cdf(i-1)+histgram(i);
end
for i=1:a
for j=1:b
k=cm(i,j);
cm_equ(i,j)=cdf(k)*256/(a*b);
end
end
imshow(uint8(cm_equ));
figure(2);imhist(uint8(cm_equ));