您好,欢迎访问三七文档
11、设计目的在matlab软件中实现图像灰度变换。2、方案简介灰度即使用黑色调表示物体。每个灰度对象都具有从0%(白色)到100%(黑色)的亮度值。灰度变换处理是图像增强处理技术中一种非常基础、直接的空间域图像处理方法,也是图像数字化和图像显示的一个重要组成部分。灰度变换主要针对独立的像素点进行处理,通过改变原始图像数据所占有的灰度范围而使图像在视觉上得到改观。本设计完成图像的灰度变换,包括图像反转、对数变换、伽马变换和分段线性变换。3、方案内容3.1、图像反转3.1.1、图像反转概念图像灰度反转简单来说就是使黑变白,使白变黑,将原始图像的灰度值进行翻转,使输出图像的灰度随输入图像的灰度增加而减少。假设对灰度级范围是(0,L-1)的图像求反,就是通过变换将(0,L-1)变换到(L-1),变换公式如下:t=L-1-s。3.1.2、图像反转程序I=imread('1.tif');JJ=imadjust(I,[01],[10]);imshow(JJ,[]);figure;imshow(I,[]);3.1.3、图像反转结果在matlab软件中运行上述代码,结果如下:3.2、对数变换3.2.1、对数变换概念对数变换的一般表达式为s=cLog(1+r)(3.2.1)其中c是一个常数,并假设r≥0。此种变换使一窄带低灰度输入图像值映射为一宽带输入值。相对的是输入灰度的高调整值。可以利用这种变换来扩展被压缩的高值图像中的暗像素。相对的是反对数变换的调整值。3.2.2、对数变换程序Image=imread('1.tif');imshow(Image);Image=log(1+double(Image));figure(2),imshow(Image,[]);3.2.3、对数变换结果在matlab软件中运行上述代码,得到如下结果:53.4、分段线性变换3.4.1、分段线性变换概念对前三种灰度变换方法的补充是分段线性函数变换。与前面所讨论的函数相比,其主要优势在于形式可任意合成。事实上,可以立刻看到,有些重要变换的实际应用可由分段线性函数描述。分段线性函数的主要缺点是需要更多的用户输入。3.4.2、分段线性变换程序clearb=imread('1.tif');f0=0;g0=0;f1=10;g1=30;f2=220;g2=180;f3=255;g3=255;figure,plot([f0,f1,f2,f3],[g0,g1,g2,g3]);r1=(g1-g0)/(f1-f0);b1=-r1*f0+g0;r2=(g2-g1)/(f2-f1);b2=-r2*f1+g1;r3=(g3-g2)/(f3-f2);b3=-r3*f2+g2;axis([02550255]);[m,n]=size(b);h=double(b);figure,imshow(mat2gray(h));fori=1:mforj=1:nt=h(i,j);g(i,j)=0;6if((t=f0)&&(t=f1))g(i,j)=r1*t+b1;elseif((t=f1)&&(t=f2))g(i,j)=r2*t+b2;elseif((t=f2)&&(t=f3))g(i,j)=r3*t+b3;endendendendendfigure,imshow(mat2gray(g));3.4.3、分段线性变换结果将上述程序在matlab软件运行,得运行结果如下Γ变换3.3.1、伽马变换概念其基本形式为s=crγ(3.3.1)其中c和γ为正常数。有时考虑到偏移量(即当输入为0时的可测量输出),式2也可写成s=c(r+ε)γ。无论如何,偏移量通常是显示标定的衍生,并且一般在式(3.3.1)中忽略掉。与对数变换的情况类似,幂次曲线中γ的部分值把输入窄带暗值映射到宽带输出值。相反,输入高值时也成立。然而,与对数函数不同的是,随着γ值的变化将简单地得到一族变换曲线。3.3.2、伽马变换程序A=imread('1.tif');x=0:255;a=80,b=1.8,c=0.009;B=b.^(c.*(double(A)-a))-1;y=b.^(c.*(x-a))-1;subplot(2,2,1)imshow(A)subplot(2,2,2)imhist(A)subplot(2,2,3)4imshow(B)subplot(2,2,4)imhist(B)figure,plot(x,y)线性变换;voidCGsmView::OnXxls(){//TODO:Addyourcommandhandlercodeherelongw,h;unsignedchar*lpsrc;lpsrc=m_Image;w=m_DibHead-biWidth;h=m_DibHead-biHeight;longx,y;intf;intg,a,b;a=2.5;b=0;for(y=0;yh;y++)for(x=0;xw;x++){f=*(lpsrc+y*w+x);g=f*a+b;if(g255)g=255;if(g0)g=0;*(lpsrc+y*w+x)=g;}Invalidate();}2、按同样的方法,实现图像分段线性变换。voidCGsmView::OnFdxxbh(){//TODO:Addyourcommandhandlercodeherelongw,h;unsignedchar*lpsrc;lpsrc=m_Image;w=m_DibHead-biWidth;h=m_DibHead-biHeight;longx,y;intf,g;intm1,m2,a,b,c,d;a=20;b=120;c=10;d=230;m1=150;m2=255;floatg1=(m2-d)/(m1-b);floatg2=(d-c)/(b-a);floatg3=c/a;for(y=0;yh;y++)for(x=0;xw;x++){f=*(lpsrc+y*w+x);if(fb&&fm1)g=g1*(f-b)+d;if(fa&&fb)g=g2*(f-a)+c;if(f0&&fa)g=g3*f;if(g255)g=255;if(g0)g=0;*(lpsrc+y*w+x)=g;}Invalidate();}3、实现图像对数变换。voidCGsmView::OnDsbh(){//TODO:Addyourcommandhandlercodeherelongw,h;unsignedchar*lpsrc;lpsrc=m_Image;w=m_DibHead-biWidth;h=m_DibHead-biHeight;longx,y,f,g;for(y=0;yh;y++)for(x=0;xw;x++){f=*(lpsrc+y*w+x);g=0.02*pow(f,2);if(g255)g=255;if(g0)g=0;*(lpsrc+y*w+x)=(unsignedchar)g;}Invalidate();}
本文标题:灰度变换及其代码
链接地址:https://www.777doc.com/doc-1225970 .html