OpenCV数字图像处理三:数学基础及相关运算:点运算

数字图像处理的数学基础及相关运算:点运算

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));



你可能感兴趣的:(图像处理,plot)