实验一数字图像的获取一、实验目的1、了解图像的实际获取过程。
2、巩固图像空间分辨率和灰度级分辨率、邻域等重要概念。
3、熟练掌握图像读、写、显示、类型转换等matlab 函数的用法。
二、实验内容1、读取一幅彩色图像,将该彩色图像转化为灰度图像,再将灰度图像转化为索引图像并显示所有图像。
2、编程实现空间分辨率变化的效果。
三、实验原理1、图像读、写、显示I=imread(‘image.jpg’)Imview(I)Imshow(I)Imwrite(I,’wodeimage.jpg’)2、图像类型转换I=mat2gray(A,[amin,amax]);按指定的取值区间[amin,amax]将数据矩阵A 转化为灰度图像I,amin 对应灰度0,amax 对应1,也可以不指定该区间。
[x,map]=gray2ind(I,n);按指定的灰度级n 将灰度图像转化为索引图像,n 默认为64I=ind2gray(x,map);索引图像转化为灰度图像I=grb2gray(RGB);真彩色图像转化为灰度图像[x,map]=rgb2ind(RGB);真彩色图像转化为索引图像RGB=ind2rgb(x,map);索引图像转化为真彩色图像BW=im2bw(I,level);将灰度图像转化为二值图像,level 取值在[0,1]之间BW=im2bw(x,map,level);将索引图像转化为二值图像,level 取值在[0,1]之间BW=im2bw(RGB,level);将真彩色图像转化为二值图像,level 取值在[0,1]之间四、实验代码及结果1、in=imread('peppers.png');i=rgb2gray(in);[x,map]=gray2ind(i,128);subplot(131),imshow(in)subplot(132),imshow(i)subplot(133),imshow(x),colormap(map)2、%空间分辨率变化的效果clc,close all,cleari=imread('cameraman.tif');i=imresize(i,[256,256]);i1=i(1:2:end,1:2:end);[m1,n1]=size(i)i2=i1(1:2:end,1:2:end);[m2,n2]=size(i2)i3=i2(1:2:end,1:2:end);[m3,n3]=size(i3)subplot(221),imshow(i),xlabel('256 x 256')subplot(222),imshow(i1),xlabel('128 x 128')subplot(223),imshow(i2),xlabel('64 x 64')subplot(224),imshow(i3),xlabel('32 x 32')256 x 256128 x 12864 x 6432 x 32实验二 图像的几何变换一、实验目的掌握图像的基本几何变换的方法1、图像的平移2、图像的旋转二、实验内容练习用matalb 命令实现图像的平移、旋转操作1、.编写实现图像平移的函数2、用imread 命令从你的硬盘读取一幅256×256灰度图;3、调用平移函数,将256×256灰度图平移100行200列,在同一个窗口中显示平移前和平移后的图像。
4、再开辟一个窗口,分别用最近邻插值法、双线性插值法实现图像顺势针旋转50°,显示在同一窗口中,并比较两种效果图(在报告中)三、实验原理提示:图片平移就是实现运算四、实验代码及结果1、function [I]=hmove(i,x0,y0); %编写实现图像平移的函数hmove ,平移量为[r,c]=size(i); %x0,y0,平移前图像矩阵为i ,I(r+x0,c+y0)=0; %平移后图像矩阵为Ifor x=1:r;for y=1:c;x1=x+x0;y1=y+y0;I(x1,y1)=i(x,y);end;end;参考程序subplot(2,2,1)imshow(RGB)subplot(2,2,3)gray1=rgb2gray(RGB);imagesc(gray1),colormap(gray);⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡•⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11001001100''y x y x y x ⎩⎨⎧+=+=00''y y y x x x 即:subplot(2,2,2)I1=hmove(gray1,100,20);subimage(gray1),axis('image');subplot(2,2,4),imagesc(I1),colormap(gray),axis([1,700],[1,820]);2、显示图像的傅立叶频谱a=0:800;b=0:600;%[x,y]=meshgrid([-20:0.2:20],[-20:0.2:20]);[x,y]=meshgrid(a,b);i=imread('hr.jpg');I=rgb2gray(i);subplot(1,2,1),subimage([0,800],[0,600],i);subplot(1,2,2);s=fft2(I,601,801);mesh(x,y,log(abs(s)));%图像的傅立叶幅度频谱以三维图形显示colormap(hsv);实验三图像空域变换增强(1)一、实验目的1、掌握直方图均衡化算法。
2、巩固灰度变换、直方图修正、图像算术和逻辑运算等基础知识。
3、熟练掌握空域变换增强的matlab 相关函数用法,并能利用算法自己编写matlab 程序实现图像空域变换增强。
二、实验内容1、用函数imcomplement 对灰度图像cameraman.tif 取反。
2、利用如下分段变换曲线对canmeraman.tif 做线性灰度变换。
3、利用直方图求取算法计算以及显示pout.tif的直方图,并和imhist 函数生成的直方图作比较。
三、实验原理在图像处理中,空域是指由像素组成的空间,空域增强方法是指直接作用于像素的增强方法。
空域处理可以表示为:g(x, y)=T[ f (x, y)]j=imcomplement(i);对图像取反imhist();显示图像的直方图histeq();直方图均衡化函数imnoise(I,type,parameters);给图像加噪声bitand();图像位与运算bitor();图像位或运算四、实验代码与结果1、i=imread('cameraman.tif');j=imcomplement(i);subplot(121),imshow(i)subplot(122),imshow(j)2、clear,close all,clcin1=imread('cameraman.tif');f0=0;g0=0;f1=100;g1=60;f2=150;g2=220;f3=255;g3=255;figure,plot([f0,f1,f2,f3],[g0,g1,g2,g3]) axis tight,xlabel('f'),ylabel('g')title('intensity transformation')r1=(g1-g0)/(f1-f0);b1=g0-r1*f0;r2=(g2-g1)/(f2-f1);b2=g1-r2*f1;r3=(g3-g2)/(f3-f2);b3=g2-r3*f2;[m,n]=size(in1);in2=double(in1);for i=1:mfor j=1:nf=in2(i,j);g(i,j)=0;if (f>=0)&(f<=f1)g(i,j)=r1*f+b1;elseif (f>=f1)&(f<=f2)g(i,j)=r2*f+b2;elseif (f>=f2)&(f<=f3)g(i,j)=r3*f+b3;endendendfigure,subplot(121),imshow(in1) subplot(122),imshow(mat2gray(g))3、clc,clear,close allin=imread('pout.tif');[m,n]=size(in);num=zeros(1,256); % num 是每个灰度级对应的像素个数p=zeros(1,256); % p 是每个灰度级出现的概率for i=1:mfor j=1:nnum(1,in(i,j)+1)=num(1,in(i,j)+1)+1;% 统计个数endendp=num./(m*n)% 求概率x=1:256;subplot(121),plot(x,p) ,axis([1 256 0 0.06])subplot(122),imhist(in)实验四图像空域变换增强(2)一、实验目的1、掌握直方图均衡化算法。
2、巩固灰度变换、直方图修正、图像算术和逻辑运算等基础知识。
3、熟练掌握空域变换增强的matlab 相关函数用法,并能利用算法自己编写matlab 程序实现图像空域变换增强。
实现频域线性变换,非线性变换增强二、实验内容1、利用直方图均衡化算法对图像pout.tif 进行增强运算。
2、对图像lena.jpg 作逻辑与和逻辑或运算。
三、实验原理j=imcomplement(i);对图像取反imhist();显示图像的直方图histeq();直方图均衡化函数imnoise(I,type,parameters);给图像加噪声bitand();图像位与运算bitor();图像位或运算四、实验代码与结果1、clear; close all; clc;tu=imread('pout.tif'); % 输入图像%tu=rgb2gray(tu); % 转换为灰度图像N=zeros(1,256); % N 为原始图像各灰度级像素个数P=zeros(1,256); % P 为原始成图像直方图q=zeros(1,256); % q 为原始图像直方图累积分布函数newN=zeros(1,256); % newN 为新生成图像各灰度级像素个数newP=zeros(1,256); % newP 为新生成图像直方图newq=zeros(1,256); % newq 为新生成图像直方图累积分布函数[h w]=size(tu);new_tu=zeros(h,w);% 计算原始图像各灰度级像素个数for x=1:hfor y=1:wN(1,tu(x,y))=N(1,tu(x,y))+1;endendP=N./sum(N);% 计算原始直方图P% 计算原始累积分布直方图q(1,1)=P(1,1);for i=2:256q(1,i)=q(1,i-1)+P(1,i);end% 计算原始直方图对应的新的灰度t ,建立映射关系for i=1:256t(1,i)=floor(254*q(1,i)+1+0.5);end% 计算直方图均衡化后的新图new_tufor x=1:hfor y=1:wnew_tu(x,y)=t(1,tu(x,y));endend% 统计新生成图像各灰度级像素个数for x=1:hfor y=1:wnewN(1,new_tu(x,y))=newN(1,new_tu(x,y))+1;endendnewP=newN./(h*w);% 计算新的灰度直方图newP% 计算新生成图像累积分布直方图newq(1,1)=newP(1,1);for i=2:256newq(1,i)=newq(1,i-1)+newP(1,i);end% 显示信息subplot(231),imshow(tu)subplot(232),plot(P),axis([1 256 0 0.06])subplot(233),plot(q),axis([1 256 0 1])subplot(234),imshow(new_tu,[])subplot(235),plot(newP),axis([1 256 0 0.06])subplot(236),plot(newq),axis([1 256 0 1])2、clc,clear,close allin=imread('lena.jpg');in=rgb2gray(in);[m,n]=size(in);in=double(in);out1=ones(m,n)*255;out1(20:150,30:170)=0;chu1=zeros(m,n);chu1(20:150,30:170)=255;for i=1:mfor j=1:nout2(i,j)=bitor(in(i,j),out1(i,j));chu2(i,j)=bitand(in(i,j),chu1(i,j));endendin=uint8(in);out1=uint8(out1);out2=uint8(out2);chu1=uint8(chu1);chu2=uint8(chu2);subplot(231),imshow(in)subplot(232),imshow(out1)subplot(233),imshow(out2)subplot(234),imshow(chu1)subplot(235),imshow(chu2)实验五图像滤波增强一、实验目的1、掌握各种空域和频域图像滤波增强算法已经模板运算的基本方法。