数据类:double,unit8,unit16,unit32,int8,int16,int32,single,char,logical!Matlab中所有数值计算都可以用double类来进行!,unit8实际中最常用的图像图像类型:亮度图像,二值图像,索引图像,RGB图像亮度图像:是数据矩阵,若是unit8或uint16则是【0,255】或者是【0,65535】,若是double 类,则像素取值是浮点数二值图像只有:0和1的逻辑数组!、简单操作:读图并显示详细情况>> f=imread('E:\image\book.pgm');whosName Size Bytes Class Attributesf 289x338 97682 uint8将图像垂直翻转:>> f=imread('E:\image\book.pgm');fp=f(end:-1:1, : );imshow(fp)将图像上下左右翻转:f=imread('E:\image\book.pgm');fc=f(end:-1:1,end:-1:1);imshow(fc)将图像二次采样并显示详情:>> fs=f(1:2:end,1:2:end);imshow(fs)>> whos fsName Size Bytes Class Attributesfs 145x169 24505 uint8将图像取出一部分:>> fg=f(200:250,200:300);imshow(fg)显示图像中的一条水平扫描线:>> plot(f(200, : )将两幅图像进行相乘:f=imread('c:\image\liangdian.jpg');g=imread('c:\image\shuiguo.jpg');g=g(300:715,500:1149);f=f(1:416,1:650);fd=double(f);gd=double(g);p=fd.*gd;数组乘!pmax=max(p(:));pmin=min(p(:));取最大最小值!pn=mat2gray(p);figure,imshow(pn)亮度变化:函数imadjust是对灰度图像进行亮度变化的基本ipt工具:g=imadjust(f,[low-in high-in],[low-in high-in],gamma)Gamma为1线性映射,大于1,则映射被加权至更低(更暗的)输出值,小于一,加权至更高的输出值明暗反转图像(负片)参数不同:>> f=imread('E:\image\book.pgm');g=imadjust(f, [0 1],[1 0 ]);imshow(g)>> f=imread('E:\image\book.pgm');g=imadjust(f, [0 1],[1 0 ],2);imshow(g)>> f=imread('E:\image\book.pgm');g=imadjust(f, [0 1],[1 0 ],0.5);imshow(g)另外也可以这样:进行明暗反转:g=imcomplement(f);imshow(g)将0.5到0.75之间的灰度级拓展到0-1,可用于突出我们感兴趣的亮度带g2= g2=imadjust(f,[0.5 0.75],[0 1]);imshow(g2)这个类似上面语句,但又更多的灰色调,方法是压缩灰度级的低端并扩展灰度级的高端g3=imadjust(f,[],[],2);imshow(g3)对数和对比度拉伸变换:对数变换通过此式子完成:g=c*log(1+double(f))对8比特而言,最简便:gs=im2uint8(mat2gray(g))使用mat2gray可将值限定在0-1之间,im2uint可将值限定在0-255之间使用对数变化减小动态范围:>> g=im2uint8(mat2gray(log(1+double(f)));imshow(g)图像g与原图像相比,在视觉方面的改善效果是非常明显的函数intrans:建立一个函数intrans,利用对比度拉伸方法得到增强图像然后在主界面输入:f=imread('E:\image\book.pgm');g=intrans(f,'stretch',mean2(im2double(f)),0.9);figure,imshow(g) 函数gscale,亮度标度的函数:g=gscale(f,method,low,high)处理图像时,即管中间没问题,但想利用8比特或者16比特格式包村或查看一副图像时会出现问题,则要将图像调度在全尺度。
将彩色图像变成灰度图像并变小:>> I=imread('d:\image\tupian2.jpg');whos IName Size Bytes Class AttributesI 1000x666x3 1998000 uint8>> I=imread('d:\image\tupian2.jpg');f=rgb2gray(I);s=f(1:2:end,1:2:end);imshow(s)>> whos sName Size Bytes Class Attributess 500x333 166500 uint8生成并绘制图像的直方图:把pgm图像的直方图显示出来:h= imhist(f,b)b适用于形成直方图的收集箱的个数,即灰度级的个数>> f=imread('E:\image\book.pgm');imhist(f)把彩色图片变成灰度图像再进行显示其直方图:>> I=imread('d:\image\tupian2.jpg');f=rgb2gray(I);imhist(s)直方图经常使用条形图来进行显示:Bar(horz,v, width)width为1竖条较明显,为零时是简单的垂直线。
默认为0.8V是一个行向量,它包含将被绘制的点;下面的语句将生成一幅条形图,其水平轴以10个灰度级为一组:>> f=imread('E:\image\book.pgm');h=imhist(f);h1=h(1:10:256);horz=1:10:256;bar(horz,h1)>> axis([0 255 0 1200])>> set(gca,'xtick',0:50:255)>> set(gca,'ytick',0:200:1200)函数axis:axis([xmin xmax ymin ymax]) 用来标注输出的图线的最大值最小值。
其中,[xmin xmax ymin ymax]用来表示需要显示坐标的范围,xmin、xmax、ymin、ymax分别表示X、Y轴坐标最小和最大值。
gca 表示获得当前轴,xtick和ytick按所示的间隔设置水平轴和垂直轴的刻度利用title函数可以给图形加入标题:title(‘titlestring’)‘’内为标题处出现的字符串,把语句加在上面语句之后即可绘制杆状图:>> f=imread('E:\image\book.pgm');>> h1=h(1:10:256);>> horz=1:10:256;>> stem(horz,h1,'fill')>> axis([0 255 0 1200])>> set(gca,'xtick',0:20:255)>> set(gca,'ytick',0:100:1200)绘制plot图形:使用函数plot(horz,v,'color-linestyle-maker')可以自动设定坐标轴的取值范围和刻度线,此时我们使用以下函数:ylim('auto')xlim('auto')直方图均衡化:灰度级均衡化处理的最终结果是一幅扩展了的动态范围的图像,它具有较高的对比度,注意该变换函数只不过是一个累积分布函数使用直方图并调用直方图均衡化技术来处理离散灰度级时,一般说来,处理后的图像的直方图将不再均匀,这源于变量的离散属性。
直方图均衡化使用函数histeq(f,nlev)>> imshow(f);>> figure ,imhist(f);>> ylim('auto')>> g=histeq(f,256);>> figure,imshow(g)>> figure,imhist(g)>>ylim('auto')空间滤波:线性空间滤波(暂缓····)subplot(m,n,p)的意思:plot是图的意思,sub是子的意思。
subplot(m,n,p)生成m*n个子图,当前激活第p个子图。
彩色图像不能直接进行傅立叶变换,图像处理中很多情况下都是把一幅彩色图像分成三个类似灰度图像(一般是red,green,blue)来进行处理的。
至于进行傅立叶变化,可以直接对灰度图像进行二维傅立叶变换fft2,但是结果仍需要处理才能更容易理解和观察。
高斯模糊是低通滤波的一种,也就是滤波函数是高斯函数,由于理想低通滤波会带来振铃现象,所以往往采用巴特尔茨或者高斯函数作为滤波函数。
高斯滤波是指用高斯函数作为滤波函数,至于是不是模糊,要看是高斯低通还是高斯高通,低通就是模糊,高通就是锐化高斯平滑滤波:>> img=imread('e:\image\shuiguo.jpg');f=rgb2gray(img);彩图变成灰度图像subplot(1,2,1);创建子图imshow(f); 并在子图中的一行一列显示灰度图ff=double(f); 把其他类型对象转换为双精度数值f=fft2(f); 二维离散Fourier变换f=fftshift(f); 直流分量对中的谱,,简化频谱的视觉效应,函数fftshift通过交换F 的象限来操作,若a=【 1 2;3 4】则fftshift(a)=【4 3;2 1 】在变化计算后使用fftshift的结果与在计算变换前将输入图像乘以(-1)的x+y次方所得结果是相同的,但不可以互换![m,n]=size(f); size取矩阵的大小d0=80;m1=fix(m/2); fix向零取整n1=fix(n/2); fix向零取整for i=1:mfor j=1:nd=sqrt((i-m1)^2+(j-n1)^2);h(i,j)=exp(-d^2/2/d0^2);endendg=f.*h;g=ifftshift(g);g=ifft2(g);g=mat2gray(real(g)); real表示复数的实部,ifft的输出实际上都会有很小的虚部分量,因此要提取结果的虚部mat2gray实现图像矩阵的归一化操作。