《数字图像处理》上机实验报告1

合集下载

matlab 数字图像处理实验报告(五份)

matlab 数字图像处理实验报告(五份)

《数字图像处理实验报告》实验一图像的增强一.实验目的1.熟悉图像在MATLAB下的读写、输出;2.熟悉直方图;3.熟悉图像的线性指数等;4.熟悉图像的算术运算和几何变换。

二.实验仪器计算机、MATLAB软件三.实验原理图像增强是指根据特定的需要突出图像中的重要信息,同时减弱或去除不需要的信息。

从不同的途径获取的图像,通过进行适当的增强处理,可以将原本模糊不清甚至根本无法分辨的原始图像处理成清晰的富含大量有用信息的可使用图像。

其基本原理是:对一幅图像的灰度直方图,经过一定的变换之后,使其成为均匀或基本均匀的,即使得分布在每一个灰度等级上的像素个数.f=H等或基本相等。

此方法是典刑的图像空间域技术处理,但是由于灰度直方图只是近似的概率密度函数,因此,当用离散的灰度等级做变换时,很难得到完全平坦均匀的结果。

频率域增强技术频率域增强是首先将图像从空间与变换到频域,然后进行各种各样的处理,再将所得到的结果进行反变换,从而达到图像处理的目的。

常用的变换方法有傅里叶变换、DCT变换、沃尔什-哈达玛变换、小波变换等。

假定原图像为f(x,y),经傅立叶变换为F(u,v)。

频率域增强就是选择合适的滤波器H(u,v)对F(u,v)的频谱成分进行处理,然后经逆傅立叶变换得到增强的图像。

四.实验内容及步骤1.图像在MATLAB下的读写、输出;实验过程:>> I = imread('F:\image\624baf9dbcc4910a.jpg');figure;imshow(I);title('Original Image');text(size(I,2),size(I,1)+15, ...'IMG_20170929_130307.jpg', ...'FontSize',7,'HorizontalAlignment','right');Warning: Image is too big to fit on screen; displaying at 25% > In imuitools\private\initSize at 86In imshow at 196Original Image2.给定函数的累积直方图。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告1. 引言数字图像处理是使用计算机来处理和优化图像的一种技术。

在本实验中,我们将探索几种常见的数字图像处理方法,并使用Python编程语言和相关库来实现。

2. 实验目的本实验的主要目的是:1.了解图像的基本特性和数字图像处理的基本原理;2.熟悉Python编程语言和相关图像处理库的使用;3.实现常见的图像处理算法并进行实验验证。

3. 实验方法在本实验中,我们使用Python编程语言和以下相关库来实现图像处理算法:•OpenCV:用于图像读取、显示和保存等基本操作;•Numpy:用于图像数据的处理和算术运算;•Matplotlib:用于图像的可视化和结果展示。

以下是实验涉及到的图像处理方法和步骤:1.图像读取和显示:使用OpenCV库读取图像,使用Matplotlib库显示图像;2.图像的灰度化:将彩色图像转换为灰度图像;3.图像的二值化:将灰度图像转换为黑白二值图像;4.图像的平滑处理:使用平滑滤波器对图像进行平滑处理,如均值滤波和高斯滤波;5.图像的边缘检测:使用边缘检测算法对图像进行边缘检测,如Sobel算子和Canny算子;6.图像的直方图均衡化:对灰度图像进行直方图均衡化,增强图像的对比度。

4. 实验过程和结果4.1 图像读取和显示首先,我们使用OpenCV库读取一张图像,并使用Matplotlib库显示该图像:import cv2import matplotlib.pyplot as plt# 读取图像img = cv2.imread('image.jpg')# 显示图像plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.axis('off')plt.show()4.2 图像的灰度化接下来,我们将彩色图像转换为灰度图像:# 灰度化图像gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 显示灰度图像plt.imshow(gray_img, cmap='gray')plt.axis('off')plt.show()4.3 图像的二值化然后,我们将灰度图像转换为黑白二值图像:# 二值化图像_, binary_img = cv2.threshold(gray_img, 128, 255, cv2.THRESH_BINARY)# 显示二值图像plt.imshow(binary_img, cmap='gray')plt.axis('off')plt.show()4.4 图像的平滑处理接下来,我们使用平滑滤波器对图像进行平滑处理,例如使用5x5的均值滤波器和高斯滤波器:# 均值滤波mean_img = cv2.blur(img, (5, 5))# 高斯滤波gaussian_img = cv2.GaussianBlur(img, (5, 5), 0) # 显示平滑处理后的图像plt.figure(figsize=(10, 5))plt.subplot(121)plt.imshow(cv2.cvtColor(mean_img, cv2.COLOR_BGR2R GB))plt.title('Mean Filter')plt.axis('off')plt.subplot(122)plt.imshow(cv2.cvtColor(gaussian_img, cv2.COLOR_B GR2RGB))plt.title('Gaussian Filter')plt.axis('off')plt.show()4.5 图像的边缘检测然后,我们使用边缘检测算法对图像进行边缘检测,例如使用Sobel算子和Canny算子:# 边缘检测sobel_img = cv2.Sobel(gray_img, cv2.CV_8U, 1, 1, ksize=3)canny_img = cv2.Canny(gray_img, 50, 150)# 显示边缘检测结果plt.figure(figsize=(10, 5))plt.subplot(121)plt.imshow(sobel_img, cmap='gray')plt.title('Sobel Operator')plt.axis('off')plt.subplot(122)plt.imshow(canny_img, cmap='gray')plt.title('Canny Operator')plt.axis('off')plt.show()4.6 图像的直方图均衡化最后,我们对灰度图像进行直方图均衡化,以增强图像的对比度:# 直方图均衡化equalized_img = cv2.equalizeHist(gray_img)# 显示直方图均衡化结果plt.imshow(equalized_img, cmap='gray')plt.axis('off')plt.show()5. 实验总结通过本实验,我们熟悉了数字图像处理的基本方法和步骤,并使用Python编程语言和相关库实现了图像的读取、显示、灰度化、二值化、平滑处理、边缘检测和直方图均衡化等操作。

(完整word版)数字图像处理 实验报告(完整版)

(完整word版)数字图像处理 实验报告(完整版)

数字图像处理实验一 MATLAB数字图像处理初步一、显示图像1.利用imread( )函数读取一幅图像,假设其名为lily.tif,存入一个数组中;2.利用whos 命令提取该读入图像flower.tif的基本信息;3.利用imshow()函数来显示这幅图像;实验结果如下图:源代码:>>I=imread('lily.tif')>> whos I>> imshow(I)二、压缩图像4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为lily.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。

6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flily.bmp。

7.用imread()读入图像Sunset.jpg和Winter.jpg;8.用imfinfo()获取图像Sunset.jpg和Winter.jpg的大小;9.用figure,imshow()分别将Sunset.jpg和Winter.jpg显示出来,观察两幅图像的质量。

其中9的实验结果如下图:源代码:4~6(接上面两个) >>I=imread('lily.tif')>> imfinfo 'lily.tif';>> imwrite(I,'lily.jpg','quality',20);>> imwrite(I,'lily.bmp');7~9 >>I=imread('Sunset.jpg');>>J=imread('Winter.jpg')>>imfinfo 'Sunset.jpg'>> imfinfo 'Winter.jpg'>>figure(1),imshow('Sunset.jpg')>>figure(2),imshow('Winter.jpg')三、二值化图像10.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。

数字图像处理实验报告Word版

数字图像处理实验报告Word版

《数字图像处理上机》实验报告班级:电信1101姓名:XXXXXX学号:0703110107数字图像处理上机实验1、实验目的了解matlab软件/语言,学会使用matlab的图像处理工具箱(Image Processing Toolbox),使学生初步具备使用该软件处理图像信息的能力,并能够利用该软件完成本课程规定的其他实验和作业。

熟悉常用的图像文件格式与格式转换;熟悉图像矩阵的显示方法(灰度、索引、黑白、彩色);熟悉图像矩阵的格式转换。

,学会使用MatLab对图像作滤波处理,使学生有机会掌握滤波算法,体会滤波效果。

了解几种不同滤波方式的使用和使用的场合,培养处理实际图像的能力.2、实验要求学生应当基本掌握matlab的操作,掌握matlab图像处理工具箱中最常用的函数用法。

练习图像读写命令imread和imwrite并进行图像文件格式之间的转换。

学生应当完成对于给定图像+噪声,使用平均滤波器、中值滤波器对不同强度的高斯噪声和椒盐噪声,进行滤波处理;能够正确地评价处理的结果;能够从理论上作出合理的解释。

3、实验内容及步骤1、图像的显示与格式转换(1)学习matlab的基本操作;(2)使用imread函数读入图像;(3)使用figure函数创建窗口;(4)使用image或imshow函数显示图像;(5)使用colorbar函数在图像的右侧显示图像的亮度条。

2、图像的滤波(1) 考察平均滤波器对高斯噪声污染的图象去噪效果;(2) 考察中值滤波器对高斯噪声污染的图象去噪效果;(3) 考察平均滤波器对椒盐噪声污染的图象去噪效果;(4) 考察中值滤波器对椒盐噪声污染的图象去噪效果。

(5) 考察滤波器模板大小对平均滤波器滤波效果的影响;(6) 考察滤波器模板大小对中值滤波器滤波效果的影响;3、图像的频域变换在Matlab workspace中生成一幅大小为256×256像素的8位灰度图, 背景为黑色,中心有一个宽80像素高40像素的白色矩形。

数字图像处理上机报告

数字图像处理上机报告

数字图像处理上机报告时间:2020年08月02日编稿:作者四第一篇:数字图像处理上机报告练习一常用MATLAB图像处理命令一、练习目的1、熟悉并掌握MATLAB工具的使用;2、实现图像的读取、显示、代数运算和简单变换。

二、练习环境Windows操作系统Matlab 6.5或以上应用软件三、练习内容1、图像文件的读写(1)imread函数用来实现图像文件的读取。

输入以下程序: A=imread('文件名.扩展名');%用imread函数来读入图像注:设置路径 imshow(A);%用imshow函数来显示图像得到的结果如图:(2)imfinfo函数用来查询图像文件信息。

输入以下程序:info=imfinfo('文件名.扩展名');% 用imfinfo函数查询图像文件信息得到: info =Filename: '文件名.扩展名'(4)imshow函数用来显示图像。

刚才介绍imread函数时已使用此函数。

(5)colorbar函数将颜色条添加到坐标轴对象中。

输入以下程序:RGB=imread('***');%图像读入I=rgb2gray(RGB);%把RGB图像转换成灰度图像imshow(I),colorbar('vert')% 将颜色条添加到坐标轴对象中得到如图:2、图像处理的基本操作一、图像代数运算(1)imadd函数实现两幅图像的相加或者给一幅图像加上一个常数。

给图像每个像素都增加亮度的程序如下: I=imread('***'); J=imadd(I,100);%给图像增加亮度 subplot(1,2,1),imshow(I) %填充 subplot(1,2,2),imshow(J) 结果如图5。

(2)imsubtract函数实现从一幅图像中减去一个常数。

输入以下程序实现从一幅图像中减去一个常数:(3)immultiply实现两幅图像的相乘或者一幅图像的亮度缩放(图像乘以小于1或大于1的参数,比较效果)。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告数字图像处理实验报告1一. 实验内容:主要是图像的几何变换的编程实现,具体包括图像的读取、改写,图像平移,图像的镜像,图像的转置,比例缩放,旋转变换等.具体要求如下:1.编程实现图像平移,要求平移后的图像大小不变;2.编程实现图像的镜像;3.编程实现图像的转置;4.编程实现图像的比例缩放,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的缩放效果;5.编程实现以任意角度对图像进行旋转变换,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的旋转效果.二.实验目的和意义:本实验的目的是使学生熟悉并掌握图像处理编程环境,掌握图像平移、镜像、转置和旋转等几何变换的方法,并能通过程序设计实现图像文件的读、写操作,及图像平移、镜像、转置和旋转等几何变换的程序实现.三.实验原理与主要框架:3.1 实验所用编程环境:Visual C++(简称VC)是微软公司提供的基于C/C++的应用程序集成开发工具.VC拥有丰富的功能和大量的扩展库,使用它能有效的创建高性能的Windows应用程序和Web应用程序.VC除了提供高效的C/C++编译器外,还提供了大量的可重用类和组件,包括著名的微软基础类库(MFC)和活动模板类库(ATL),因此它是软件开发人员不可多得的开发工具.VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于VC具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具.在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用.3.2 实验处理的对象:256色的BMP(BIT MAP )格式图像BMP(BIT MAP )位图的文件结构:具体组成图: BITMAPFILEHEADER位图文件头(只用于BMP文件) bfType=”BM” bfSize bfReserved1bfReserved2bfOffBitsbiSizebiWidthbiHeightbiPlanesbiBitCountbiCompressionbiSizeImagebiXPelsPerMeterbiYPelsPerMeterbiClrUsedbiClrImportant单色DIB有2个表项16色DIB有16个表项或更少256色DIB有256个表项或更少真彩色DIB没有调色板每个表项长度为4字节(32位)像素按照每行每列的顺序排列每一行的字节数必须是4的整数倍BITMAPINFOHEADER 位图信息头 Palette 调色板 DIB Pixels DIB图像数据1. BMP文件组成BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成.2. BMP文件头BMP文件头数据结构含有BMP文件的类型(必须为BMP)、文件大小(以字节为单位)、位图文件保留字(必须为0)和位图起始位置(以相对于位图文件头的偏移量表示)等信息.3. 位图信息头BMP位图信息头数据用于说明位图的尺寸(宽度,高度等都是以像素为单位,大小以字节为单位, 水平和垂直分辨率以每米像素数为单位) ,目标设备的级别,每个像素所需的位数, 位图压缩类型(必须是 0)等信息.4. 颜色表颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色.具体包含蓝色、红色、绿色的亮度(值范围为0-255)位图信息头和颜色表组成位图信息5. 位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上.Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充.3.3 BMP(BIT MAP )位图的显示:①一般显示方法:1. 申请内存空间用于存放位图文件2. 位图文件读入所申请内存空间中3. 在函数中用创建显示用位图, 用函数创建兼容DC,用函数选择显示删除位图但以上方法的缺点是: 1)显示速度慢; 2) 内存占用大; 3) 位图在缩小显示时图形失真大,(可通过安装字体平滑软件来解决); 4) 在低颜色位数的设备上(如256显示模式)显示高颜色位数的图形(如真彩色)图形失真严重.②BMP位图缩放显示 :用视频函数来显示位图,内存占用少,速度快,而且还可以对图形进行淡化(Dithering )处理.淡化处理是一种图形算法,可以用来在一个支持比图像所用颜色要少的设备上显示彩色图像.BMP位图显示方法如下:1. 打开视频函数,一般放在在构造函数中2. 申请内存空间用于存放位图文件3. 位图文件读入所申请内存空间中4. 在函数中显示位图5. 关闭视频函数 ,一般放在在析构函数中以上方法的优点是: 1)显示速度快; 2) 内存占用少; 3) 缩放显示时图形失真小,4) 在低颜色位数的设备上显示高颜色位数的图形图形时失真小; 5) 通过直接处理位图数据,可以制作简单动画.3.4 程序中用到的访问函数Windows支持一些重要的DIB访问函数,但是这些函数都还没有被封装到MFC中,这些函数主要有:1. SetDIBitsToDevice函数:该函数可以直接在显示器或打印机上显示DIB. 在显示时不进行缩放处理.2. StretchDIBits函数:该函数可以缩放显示DIB于显示器和打印机上.3. GetDIBits函数:还函数利用申请到的内存,由GDI位图来构造DIB.通过该函数,可以对DIB的格式进行控制,可以指定每个像素颜色的位数,而且可以指定是否进行压缩.4. CreateDIBitmap函数:利用该函数可以从DIB出发来创建GDI 位图.5. CreateDIBSection函数:该函数能创建一种特殊的DIB,称为DIB项,然后返回一个GDI位图句柄.6. LoadImage函数:该函数可以直接从磁盘文件中读入一个位图,并返回一个DIB句柄.7. DrawDibDraw函数:Windows提供了窗口视频(VFW)组件,Visual C++支持该组件.VFW中的DrawDibDraw函数是一个可以替代StretchDIBits 的函数.它的最主要的优点是可以使用抖动颜色,并且提高显示DIB的速度,缺点是必须将VFW代码连接到进程中.3.5 图像的几何变换图像的几何变换,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等.数字图像处理实验报告2一、实验的目的和意义实验目的:本实验内容旨在让学生通过用VC等高级语言编写数字图像处理的一些基本算法程序,来巩固和掌握图像处理技术的基本技能,提高实际动手能力,并通过实际编程了解图像处理软件的实现的基本原理。

数字图像处理上机实验报告

数字图像处理上机实验报告

数字图像处理上机实验报告姓名:李青学号: 104090423学院:物理与电子信息学院班级: 10电子实验课题: 五类图像处理的运算方法任课教师:石俊生(教授)填表日期:2013年11月3日一.实验内容实验1:直方图均衡图像增强;实验2: 空域处理:不同平均模板大小:3⨯3、5⨯5、7⨯7去噪;实验3: 空域处理:不同中值模板大小:3⨯3、5⨯5、7⨯7去噪;实验4: 频域处理:对图像低通、高通、带通处理结果比较;实验5:常用边缘检测算子检测;实验6:逆滤波和维纳滤波对运动模糊复原;实验7:DPCM图像压缩。

二.实验目的学会用Matlab中的下列函数对输入图像进行上述5类运算;感受各种不同的图像处理方法对最终图像效果的影响。

Imhist;histeq;nlfilter;mean2;std2;fspecial;filter2;medfilt2;三.实验结果实验1:直方图均衡图像增强(a)原始图像及直方图均衡化后的图像(b)均衡化前后图像的直方图(c)调整灰度原始图像和调整灰度增强后图像实验2: 空域处理:不同平均模板大小:3⨯3、5⨯5、7⨯7去噪(a)原始图像和3*3模板去噪后图像(b)原始图像和5*5模板去噪后图像(c)原始图像和7*7模板去噪后图像实验3: 空域处理:不同中值模板大小:3⨯3、5⨯5、7⨯7去噪实验4: 频域处理:对图像低通、高通、带通处理结果比较(a)原图像与低通滤波图像(b)原图像与高通滤波图像(c)原图像与带通滤波图像实验5:常用边缘检测算子检测(1)lena(2)camaraman(3)Cell(4)rice(5)tire实验6:逆滤波和维纳滤波对运动模糊复原实验7:DPCM图像压缩四.结论与讨论(1)直方图均衡化是通过对原图像进行某种变换,重新分配图像像素值,把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内均匀分布的形式,从而使原始图像的直方图改变成均匀分布的直方图,达到增强图像整体对比度的效果。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理上机(一)1.灰度切割变换lena.bmp(1)程序:I=imread('lena.jpg');figure; imshow(I);I=double(I)[M,N]=size(I);for i=1:Mfor j=1:Nif I(i,j)<=50I(i,j)=40;elseif I(i,j)<=180I(i,j)=220;elseI(i,j)=40;endendendI=uint8(I);figure;imshow(I);(2)Matleb图像:(变换前) (变换后):2.彩色图像转换成灰度图象(1)程序:RGB=imread('greens.jpg'); %装入真彩图像figure(1);imshow(RGB); %显示彩色图像GRAY=rgb2gray(RGB); %将真彩图像转换为灰度图像figure(2);imshow(GRAY); %显示灰度图像(2)Matleb图像:3. 图像求反(1)程序:I=imread('lena.jpg');Imshow(I)I=double(I)I=256-1-II=uint8(I)figureImshow(I)(2)Matleb图像:(变换前) (变换后)4.线性灰度变换(1)程序:I=imread('pout.tif');imshow(I);I=double(I);[M,N]=size(I); %线性灰度变换for i=1:Mfor j=1:Nif I(i,j)<=30I(i,j)=I(i,j);elseif I(i,j)<=150I(i,j)=(200-30)/(150-30)*(I(i,j)-30)+30;elseI(i,j)=(255-200)/(255-150)*(I(i,j)-150)+200;endendendfigure(2);imshow(uint8(I));(2)Matleb图像:(变换前) (变换后)5.原图像灰度取值范围为[0,512],现将图像的灰度压缩到[0,256],使用对数变换完成。

数字图像处理实验报告(全答案解析)..

数字图像处理实验报告(全答案解析)..

数字图像处理实验报告(全答案解析)..实验⼀常⽤MATLAB图像处理命令⼀、实验⽬的1、熟悉并掌握MATLAB⼯具的使⽤;2、实现图像的读取、显⽰、代数运算和简单变换。

⼆、实验环境MATLAB 6.5以上版本、WIN XP或WIN2000计算机三、常⽤函数●读写图像⽂件1 imreadimread函数⽤于读⼊各种图像⽂件,如:a=imread('e:\w01.tif')2 imwriteimwrite函数⽤于写⼊图像⽂件,如:imwrite(a,'e:\w02.tif',’tif’)3 imfinfoimfinfo函数⽤于读取图像⽂件的有关信息,如:imfinfo('e:\w01.tif') ●图像的显⽰1imageimage函数是MATLAB提供的最原始的图像显⽰函数,如: a=[1,2,3,4;4,5,6,7;8,9,10,11,12]; image(a);2 imshowimshow函数⽤于图像⽂件的显⽰,如:i=imread('e:\w01.tif');imshow(i);title(‘原图像’)%加上图像标题3 colorbarcolorbar函数⽤显⽰图像的颜⾊条,如:i=imread('e:\w01.tif');imshow(i);colorbar;4 figurefigure函数⽤于设定图像显⽰窗⼝,如:figure(1); /figure(2);5 subplot把图形窗⼝分成多个矩形部分,每个部分可以分别⽤来进⾏显⽰。

Subplot(m,n,p)分成m*n个⼩窗⼝,在第p个窗⼝中创建坐标轴为当前坐标轴,⽤于显⽰图形。

6 plot绘制⼆维图形plot(y)Plot(x,y)xy可以是向量、矩阵。

图像类型转换1 rgb2gray//灰⾊把真彩图像转换为灰度图像i=rgb2gray(j)2 im2bw//⿊⽩通过阈值化⽅法把图像转换为⼆值图像I=im2bw(j,level)Level表⽰灰度阈值,取值范围0~1(即0.n),表⽰阈值取⾃原图像灰度范围的n%3 imresize改变图像的⼤⼩I=imresize(j,[m n])将图像j⼤⼩调整为m⾏n列图像运算1 imadd两幅图像相加,要求同样⼤⼩,同种数据类型Z=imadd(x,y)表⽰图像x+y2 imsubstract两幅图像相减,要求同样⼤⼩,同种数据类型Z=imsubtract(x,y)表⽰图像x-y3 immultiplyZ=immultiply(x,y)表⽰图像x*y4 imdivideZ=imdivide(x,y)表⽰图像x/y5:m = imadjust(a,[,],[0.5;1]) ;%图像变亮n = imadjust(a,[,],[0;0.5]) ;%图像变暗g=255-a;%负⽚效果四、实验内容(请将实验程序填写在下⽅合适的位置,实验图像结果拷屏粘贴)1、读⼊⼀幅RGB图像,变换为灰度图像和⼆值图像,并在同⼀个窗⼝内分成三个⼦窗⼝来分别显⽰RGB图像和灰度图像,注上⽂字标题。

数字图像处理实验报告

数字图像处理实验报告

《数字图像处理》实验报告目录第一章实验一数字图像的基本操作和灰度变换 (3)1.1实验目的 (3)1.2实验原理与方法 (3)1.3实验内容与结果分析 (4)1.4思考问题 (8)第二章实验二图像的空间域增强 (9)2.1实验目的 (9)2.2实验原理与方法 (9)2.3实验内容与结果分析 (10)2.4思考问题 (16)第三章实验三图像的傅里叶变换和频域处理 (17)3.1实验目的 (17)3.2实验原理与方法 (17)3.3实验内容与结果分析 (18)附录:实验代码 (23)第一章实验一数字图像的基本操作和灰度变换1.1实验目的①了解数字图像的基本数据结构②熟悉Matlab中数字图像处理的基本函数和基本使用方法③掌握图像灰度变换的基本理论和实现方法④掌握直方图均衡化增强的基本理论和实现方法1.2实验原理与方法1.2.1图像灰度的线性变换灰度的线性变换可以突出图像中的重要信息。

通常情况下,处理前后的图像灰度级是相同的,即处理前后的图像灰度级都为[0,255]。

那么,从原理上讲,我们就只能通过抑制非重要信息的对比度来腾出空间给重要信息进行对比度展宽。

设原图像的灰度为),(j i f ,处理后的图像的灰度为),(j i g ,对比度线性展宽的原理示意图如图1.1所示。

假设原图像中我们关心的景物的灰度分布在[a f ,b f ]区间内,处理后的图像中,我们关心的景物的灰度分布在[a g ,b g ]区间内。

在这里)(a b g g g -=∆()b a f f f >∆=-,也就是说我们所关心的景物的灰度级得到了展宽。

根据图中所示的映射关系中分段直线的斜率我们可以得出线性对比度展宽的计算公式:),(j i f α, a f j i f <≤),(0=),(j i ga a g f j i f +-)),((β,b a f j i f f <≤).,( (1-1)b b g f j i f +-)),((γ,255),(<≤j i f f b(m i ,3,2,1Λ=;n j ,3,2,1Λ=) 其中,a a f g =α,a b a b f f g g --=β,bbf g --=255255γ,图像的大小为m ×n 。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告图像处理课程的目标是培养学生的试验综合素质与能力。

使学生通过实践,理解相关理论学问,将各类学问信息进行新的组合,制造出新的方法和新的思路,提高学生的科学试验与实际动手操作能力[1]。

从影像科筛选有价值的图像,建成影像学数字化试验教育平台,系统运行正常;具备图像上传、图像管理、图像检索与扫瞄、试验报告提交、老师批阅等功能;能满意使用要求[2]。

1.试验内容设计思路1.1项目建设内容和方法数字图像处理的内容:完整的数字图像处理大体上分为图像信息的猎取,存储,传送,处理,输出,和显示几个方面。

数字图像信息的猎取主要是把一幅图像转换成适合输入计算机和数字设备的数字信号,包括摄取图像,光、电转换及数字化。

数字图像信息的存储,数字图像信息的突出特点是数据量巨大,为了解决海量存储问题,数字图像的存储主要研究图像压缩,图像格式及图像数据库技术。

数字图像信息的传送数字图像信息的传送可分为系统内部传送与远距离传送[4]数字图像信息处理包括图像变换,图像增加,图像复原,彩色与多光谱处理图像重建,小波变换,图像编码,形态学,目标表示与描述。

数字图像输出和显示,最终目的是为人和机器供应一幅便于解释和识别的图像,数字图像的输出和显示也是数字图像处理的重要内容之一。

1.2数字图像处理的方法大致可以分为两大类,既空域法和频域法空域法:是把图像看做平面中各个像素组成的集合,然后直接对一维和二维函数进行相应处理,依据新图像生成方法的不同,空域处理法可为点处理法,区处理法,叠代处理法,跟踪处理法,位移不变与位移可变处理法。

点处理法的优点,点处理的典型用途a)灰度处理b)图像二值处理点处理方法的优点a)可用LUT方法快速实现b)节省存储空间。

区处理法,邻域处理法。

它依据输入图像的小邻域的像素值,按某些函数得到输出像素。

区处理法主要用于图象平滑和图像的锐化。

叠代处理法:叠代就是反复进行某些处理运算,图像叠代处理也是如此,拉普拉斯算子或平滑处理的结果是物体轮廓,该图像轮廓边缘太宽或粗细不一,要经过多次叠代把它处理成单像素轮廓——图像细化。

数字图像处理实验报告

数字图像处理实验报告

重庆邮电大学《数字图像处理》课程上机实验学院生物信息学院专业生物医学工程班级 0611302姓名李霞学号 2013211957实验一MATLAB数字图像处理初步一、实验目的与要求1.熟悉及掌握在MATLAB中能够处理哪些格式图像。

2.熟练掌握在MATLAB中如何读取图像。

3.掌握如何利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息。

4.掌握如何在MATLAB中按照指定要求存储一幅图像的方法。

5.图像间如何转化。

二、实验原理及知识点1、数字图像的表示和类别一幅图像可以被定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f 在任何坐标处(x,y)处的振幅称为图像在该点的亮度。

灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由单个二维图像组合形成的。

例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。

因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。

图像关于x和y坐标以及振幅连续。

要将这样的一幅图像转化为数字形式,就要求数字化坐标和振幅。

将坐标值数字化成为取样;将振幅数字化成为量化。

采样和量化的过程如图1所示。

因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。

作为MATLAB基本数据类型的数值数组本身十分适于表达图像,矩阵的元素和图像的像素之间有着十分自然的对应关系。

根据图像数据矩阵解释方法的不同,MA TLAB把其处理为4类:➢亮度图像(Intensity images)➢二值图像(Binary images)➢索引图像(Indexed images)➢RGB图像(RGB images)(1) 亮度图像一幅亮度图像是一个数据矩阵,其归一化的取值表示亮度。

若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65536]。

若图像是double类,则像素取值就是浮点数。

数字图像处理上机实验报告

数字图像处理上机实验报告

数字图像处理上机实验报告数字图像处理上机实验报告实验⼀:MATLAB⼯具箱的使⽤实验⽬的:11:了解matlab语⾔,熟悉并掌握matlab相关的处理语句。

2:了解matlab在图像处理中的优缺点。

3 熟悉matlab的使⽤技巧,能⽤matlab熟悉的对数字图像进⾏各种处理。

1 将⼀幅灰度图像转换成索引⾊图像。

I=imread('ngc4024m.tif');X=grayslice(I,16);imshow(I)figure,imshow(X,hot(16))2:对⼀副图像进⾏⼆值化处理。

load treesBW=im2bw(X,map,0.4);imshow(X,map)figure,imshow(BW)3:将索引⾊图像转化成灰度图像。

load trees I=ind2gray(X,map);imshow(X,map)figure,imshow(I)4:显⽰⼀幅图像。

load clown image(10,10,X) colormap(map)试验⼆图像变换实验⽬的:1 熟悉掌握DFT和DCT变换的matlab实现。

2 利⽤matlab试验DFT和DCT的变换,求出图像的频谱。

1.⼆维离散傅⾥叶变换的旋转型。

I=zeros(256,256);>> I(28:228,108:148)=1;>> imshow(I)J=fft2(I);>> F=abs(J);>> J1=fftshift(F);figure>> imshow(J1,[5 50])>> I(28:228,108:148)=1;>> J=imrotate(I,315,'bilinear','crop'); >>figure >> imshow(J)J1=fft2(J);>> F=abs(J1);>> J2=fftshift(F);figure>> imshow(J2,[5 50])2.图像的傅⾥叶频谱。

数字图像处理上机实验报告(基于Matlab)

数字图像处理上机实验报告(基于Matlab)
图像的除法
除法运算可用于校正成像设备的非线性影响。MATLAB中调用imdivide函数进行两幅图像相除。调用格式如下:
Z=imdivide(X,Y),其中Z=X÷Y。
图像四则运算
因对uint8、uintl6数据,每步运算都要进行数据截取,将会减少输出图像的信息量。图像四则运算较好的办法是使用函数imlincomb。该函数按双精度执行所有代数运算操作,仅对最后的输出结果进行截取,该函数的调用格式如下:
s=uint8(real(ifft2(s)));
subplot(2,3,4),imshow(h);title('传递函数'); %显示GHPF滤波器的传递函数
subplot(2,3,5),imshow(s); title('ILPF滤波(d0=50)'); %显示ILPF滤波后的图像
运行结果窗口截图:
第二次实验
1.图像复原算法
图像在形成、传输和记录过程中,由于受到多种原因的影响,图像的质量就会有所下降,典型的表现为图像模糊、失真、有噪声等,这一过程称为图像的退化。
图像复原是试图利用退化过程的先验知识使已退化的图像恢复本来面目,即根据退化的原因,分析引起退化的环境因素,建立相应的数学模型,并沿着使图像降质的逆过程恢复图像。目的在于消除或减轻在图像获取以及传输的过程中造成的图像品质下降,恢复图像的本来面目。因此,复原技术就是把退化模型化,并采用相反的过程进行处理,以便尽可能复原被退化图像的本来面目。
C=A(:,:,1); %取单色%
D=B(:,:,1);
figure('Name','图像逻辑运算')
res1=C&D; %C&D%
res2=C|D; %C|D%

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告数字图像处理实验报告第一章总论数字图像处理是计算机图形学、数字信号处理等学科交叉的一门学科。

它是基于数字计算机对图像信号进行数字处理的一种方法。

数字图像处理技术已广泛应用于医学影像诊断、遥感图像处理、图像识别、安防监控等领域,在当今社会中具有不可替代的重要作用。

本次实验主要介绍了数字图像处理的基本方法,包括图像采集、图像增强、图像恢复、图像分割、图像压缩等几个方面。

在实验过程中,我们采用了一些常用的数字图像处理方法,并通过 Matlab 图像处理工具箱进行实现和验证。

第二章实验过程2.1 图像采集在数字图像处理中,图像采集是一个重要的步骤。

采集到的图像质量直接影响到后续处理结果的准确性。

本次实验使用的图像是一张 TIF 格式的彩色图像,通过 Matlab 读取图像文件并显示,代码如下:```Matlabim = imread('test.tif');imshow(im);```执行代码后,可以得到如下图所示的图像:![image_1.png](./images/image_1.png)2.2 图像增强图像增强是指利用某些方法使图像具有更好的视觉效果或者变得更适合某种应用。

本次实验我们主要采用直方图均衡化、灰度变换等方法进行图像增强。

2.2.1 直方图均衡化直方图均衡化是一种常用的增强方法,它可以增加图像的对比度和亮度,使图像更加清晰。

代码实现如下:```Matlabim_eq = histeq(im);imshow(im_eq);```执行代码后,会得到直方图均衡化后的图像,如下图所示:![image_2.png](./images/image_2.png)可以看出,经过直方图均衡化处理后,图像的对比度和亮度得到了明显提高。

2.2.2 灰度变换灰度变换是一种用于调整图像灰度级别的方法。

通过变换某些像素的灰度级别,可以增强图像的视觉效果。

本次实验我们采用对数变换和幂函数变换两种方法进行灰度变换。

实验一 数字图像处理实验报告

实验一 数字图像处理实验报告

实验一数字图像的运算实验1.1 直方图一.实验目的1.熟悉matlab图像处理工具箱及直方图函数的使用;2.理解和掌握直方图原理和方法;二.实验设备1.PC机一台;2.软件matlab。

三.程序设计在matlab环境中,程序首先读取图像,然后调用直方图函数,设置相关参数,再输出处理后的图像。

I=imread('pout.tif');%读取图像subplot(1,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(1,2,2),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题四.实验步骤1. 启动matlab 双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。

书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察图像matlab环境下的直方图分布。

实验1.2 3*3均值滤波一.实验目的1.熟悉matlab图像处理工具箱及均值滤波函数的使用;2.理解和掌握3*3均值滤波的方法和应用;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用图像增强(均值滤波)函数,设置相关参数,再输出处理后的图像。

I = imread('pout.tif');figure,imshow(I);J=filter2(fspecial('average',3),I)/255;figure,imshow(J);四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字图像处理上机实验报告实验名称:图像的几何变换(象素空间关系)学期:2014/2015上学期班级:电子信息工程1102姓名:陈玮学号:3110209424实验时间:2014.09.29实验一:图像的几何变换(象素空间关系)1 目的①了解MATLAB的基本功能,掌握采用MA TLAB进行图像处理的方法;②了解图像象素空间关系;③掌握基本坐标变换,包括平移,缩放,旋转等;④了解形态变换,掌握特殊的形态变换,包括相似变换,刚体变换,等距变换等2 器材装有MATLAB的PC机一台3 原理双线性内差值法:1.数学原理已知的红色数据点与待插值得到的绿色点假如我们想得到未知函数f在点P= (x,y) 的值,假设我们已知函数f在Q11 = (x1,y1)、Q12 = (x1,y2),Q21 = (x2,y1) 以及Q22 = (x2,y2) 四个点的值。

首先在x方向进行线性插值,得到R1和R2,然后在y方向进行线性插值,得到P.这样就得到所要的结果f(x,y).其中红色点Q11,Q12,Q21,Q22为已知的4个像素点.第一步:X方向的线性插值,插入蓝色第二步:做完X方向的插值后再做Y方向的点R1和R2. 插值,由R1与R2计算P点.x方向上Y方向上插入绿色点P.线性插值的结果与插值的顺序无关。

首先进行y方向的插值,然后进行x方向的插值,所得到的结果是一样的。

但双线性插值插值方法这种方法并不是线性的,首先进行y方向的插值,然后进行x 方向的插值,与首先进行x方向的插值,然后进行y方向的插值,所得到的R1与R2是不一样的。

如果选择一个坐标系统使得的四个已知点坐标分别为(0, 0)、(0, 1)、(1, 0) 和(1, 1),那么插值公式就可以化简为f(x,y)=f(0,0)(1-x)(1-y)+f(0,1)(1-x)y+f(1,1)xy+f(1,0)x(1-y)在x与y方向上,z值成单调性特性的应用中,此种方法可以做外插运算,即可以求解Q1~Q4所构成的正方形以外的点的值。

双线性内插值算法描述如下:对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v) (其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值[0,1)区间的浮点数),则这个像素得值f(i+u,j+v) 可由原图像中坐标为(i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1) 公式1其中f问题转化如何提取源像素的中四个临近点,根据临近点插值中从目标像素寻找最临近的源像素点的方法:Sx= Dx * (Sh/Dh) // rowSy= Dy * (Sw/Dw) // column计算出来的值是浮点数坐标,分别取整数部分坐标为(j, k), 小数部分坐标为(t, u)根据小数部分的(t,u)坐标,首先进行水平方向的权重计算得出Q11 = S(j,k) * (1-t) + S(j, k+1) * t;Q22 = S(j+1, k) * (1-t) + S(j+1,K+1) *t利用Q11, Q22的值,进行垂直方向权重计算得出计算采样点值D(x, y) = Q11*(1-u) + Q22 * u; 把Q11, Q22带入,最终有等式:D(x, y) = S(j, k) *(1-t)*(1-u) + S(j, k+1)*t*(1-u) + S(j+1,k)*(1-t)*u + S(j+1,k+1)*t*u 从而得出四个对应的权重系数分别为:a = (1-t)*(1-u)b = (1-t)*uc = t*ud = t*(1-u)带入公式一,即可得出目标像素的值。

2.关键程序代码根据目标像素坐标,计算采样点浮点数坐标的代码如下:float rowRatio = ((float)srcH)/((float)destH);float colRatio = ((float)srcW)/((float)destW);double srcRow = ((float)row)*rowRatio;double srcCol = ((float)col)*colRatio;计算采样点的整数坐标和小数部分坐标代码如下:double j = Math.floor(srcRow);double t = srcRow – jdouble k = Math.floor(srcCol);double u = srcCol - k;根据小数坐标(t,u)来计算四个相邻像素点权重系数代码如下:double coffiecent1 = (1.0d-t)*(1.0d-u);double coffiecent2 = (t)*(1.0d-u);double coffiecent3 = t*u;double coffiecent4 = (1.0d-t)*u;处理边缘像素代码如下:return x>max ? max : x<min? min : x;4 实验(设计)步骤1.查找资料2.理解算法原理3.编写程序4.仿真查错5 设计结果与总结分析分析:图像横向平移30 纵向平移80,剩余用白点替换缩放:分析:图像横向缩小0.5倍,纵向缩小0.4倍旋转:分析:图像顺时针旋转45度分析:顺时针旋转45度并缩小0.5倍刚体:S=1分析:当S=1时,变换结果与旋转变换的相同S=-1分析:当S=-1时,变换结果为旋转变换的逆时针旋转变换等距:分析:变换结果为旋转45度并放大e倍6参考文献《数字图像处理(第三版)》电子工业出版社阮秋琦阮宇智等译7实验代码平移:clc;I=imread('miss.bmp');J=imread('miss.bmp');[m n]=size(I);X0=30Y0=80for x=1:mfor y=1:nJ(x,y)=255;endendfor x=1:mfor y=1:nif (x+X0<=m)&(y+Y0<=n)J(x+X0,y+Y0)=I(x,y);endendendsubplot(2,3,4),imshow(I),title('原始图像'); %显示原始图像subplot(2,3,5),imshow(J),title('平移后的图像'); %平移后的图像缩放:I=imread('miss.bmp'); %读入原图像,只需将此处的文件换成要变换的图片即可[rows,cols]=size(I);K1 = str2double(inputdlg('请输入行缩放倍数', 'INPUT scale factor', 1, {'0.5'}));%行默认变为原来的0.5倍K2 = str2double(inputdlg('请输入列缩放倍数', 'INPUT scale factor', 1, {'0.4'}));%列默认变为原来的0.4倍width = K1 * rows;height = K2 * cols;Out = uint8(zeros(width,height)); %创建输出图像矩阵widthScale = rows/width;heightScale = cols/height;for x = 6:width - 6 % 6是为了防止矩阵超出边界溢出for y = 6:height - 6oldX = x * widthScale; % oldX,oldY为原坐标,x,y为新坐标oldY = y * heightScale;if (oldX/double(uint16(oldX)) == 1.0) & (oldY/double(uint16(oldY)) == 1.0) Out(x,y) = I(int16(oldX),int16(oldY));%若oldX,oldY为整数,直接赋值 elsea = double(uint16(oldX);b = double(uint16(oldY));x11 = double(I(a,b)); % x11 赋值为 I(a,b)x12 = double(I(a,b+1)); % x12 赋值为 I(a,b+1)x21 = double(I(a+1,b)); % x21 赋值为 I(a+1,b)x22 = double(I(a+1,b+1)); % x22 赋值为 I(a+1,b+1) Out(x,y) = uint8( (b+1-oldY) * ((oldX-a)*x21 + (a+1-oldX)*x11) + (oldY-b)* ((oldX-a)*x22 +(a+1-oldX) * x12) ); % 用双线性插值计算公式计算endendendimshow(I);figure;imshow(Out);旋转:clear all;close all;clc;jiaodu=45; %要旋转的角度,旋转方向为顺时针img=imread('miss.bmp'); %这里v为原图像的高度,u为原图像的宽度imshow(img); %这里y为变换后图像的高度,x为变换后图像的宽度[h w]=size(img);theta=jiaodu/180*pi;rot=[cos(theta) -sin(theta) 0;sin(theta) cos(theta) 0;0 0 1];pix1=[1 1 1]*rot; %变换后图像左上点的坐标pix2=[1 w 1]*rot; %变换后图像右上点的坐标pix3=[h 1 1]*rot; %变换后图像左下点的坐标pix4=[h w 1]*rot; %变换后图像右下点的坐标height=round(max([abs(pix1(1)-pix4(1))+0.5 abs(pix2(1)-pix3(1))+0.5])); %变换后图像的高度width=round(max([abs(pix1(2)-pix4(2))+0.5 abs(pix2(2)-pix3(2))+0.5])); %变换后图像的宽度imgn=zeros(height,width);delta_y=abs(min([pix1(1) pix2(1) pix3(1) pix4(1)])); %取得y方向的负轴超出的偏移量delta_x=abs(min([pix1(2) pix2(2) pix3(2) pix4(2)])); %取得x方向的负轴超出的偏移量for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/rot; %用变换后图像的点的坐标去寻找原图像点的坐标,%否则有些变换后的图像的像素点无法完全填充float_Y=pix(1)-floor(pix(1));float_X=pix(2)-floor(pix(2));if pix(1)>=1 && pix(2)>=1 && pix(1) <= h && pix(2) <= wpix_up_left=[floor(pix(1)) floor(pix(2))]; %四个相邻的点 pix_up_right=[floor(pix(1)) ceil(pix(2))];pix_down_left=[ceil(pix(1)) floor(pix(2))];pix_down_right=[ceil(pix(1)) ceil(pix(2))];value_up_left=(1-float_X)*(1-float_Y); %计算临近四个点的权重value_up_right=float_X*(1-float_Y);value_down_left=(1-float_X)*float_Y;value_down_right=float_X*float_Y;imgn(i+delta_y,j+delta_x)=value_up_left*img(pix_up_left(1),pix_up_left(2))+ ...value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...value_down_right*img(pix_down_right(1),pix_down_right(2));endendendfigure,imshow(uint8(imgn))相似:clear all;close all;clc;jiaodu=45; %要旋转的角度,旋转方向为顺时针img=imread('miss.bmp'); %这里v为原图像的高度,u为原图像的宽度imshow(img); %这里y为变换后图像的高度,x为变换后图像的宽度[h w]=size(img);theta=jiaodu/180*pi;rot=[0.5*cos(theta) -0.5*sin(theta) 0;0.5*sin(theta) 0.5*cos(theta) 0;0 0 1]; pix1=[1 1 1]*rot; %变换后图像左上点的坐标pix2=[1 w 1]*rot; %变换后图像右上点的坐标pix3=[h 1 1]*rot; %变换后图像左下点的坐标pix4=[h w 1]*rot; %变换后图像右下点的坐标height=round(max([abs(pix1(1)-pix4(1))+0.5 abs(pix2(1)-pix3(1))+0.5])); %变换后图像的高度width=round(max([abs(pix1(2)-pix4(2))+0.5 abs(pix2(2)-pix3(2))+0.5])); %变换后图像的宽度imgn=zeros(height,width);delta_y=abs(min([pix1(1) pix2(1) pix3(1) pix4(1)])); %取得y方向的负轴超出的偏移量delta_x=abs(min([pix1(2) pix2(2) pix3(2) pix4(2)])); %取得x方向的负轴超出的偏移量for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/rot; %用变换后图像的点的坐标去寻找原图像点的坐标,%否则有些变换后的图像的像素点无法完全填充float_Y=pix(1)-floor(pix(1));float_X=pix(2)-floor(pix(2));if pix(1)>=1 && pix(2)>=1 && pix(1) <= h && pix(2) <= wpix_up_left=[floor(pix(1)) floor(pix(2))]; %四个相邻的点 pix_up_right=[floor(pix(1)) ceil(pix(2))];pix_down_left=[ceil(pix(1)) floor(pix(2))];pix_down_right=[ceil(pix(1)) ceil(pix(2))];value_up_left=(1-float_X)*(1-float_Y); %计算临近四个点的权重value_up_right=float_X*(1-float_Y);value_down_left=(1-float_X)*float_Y;value_down_right=float_X*float_Y;imgn(i+delta_y,j+delta_x)=value_up_left*img(pix_up_left(1),pix_up_left(2))+ . ..value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...value_down_right*img(pix_down_right(1),pix_down_right(2));endendendfigure,imshow(uint8(imgn))刚体:clear all;close all;clc;jiaodu=45; %要旋转的角度,旋转方向为顺时针img=imread('miss.bmp'); %这里v为原图像的高度,u为原图像的宽度imshow(img); %这里y为变换后图像的高度,x为变换后图像的宽度[h w]=size(img);theta=jiaodu/180*pi;rot=[-cos(theta) sin(theta) 0;-sin(theta) -cos(theta) 0;0 0 1];pix1=[1 1 1]*rot; %变换后图像左上点的坐标pix2=[1 w 1]*rot; %变换后图像右上点的坐标pix3=[h 1 1]*rot; %变换后图像左下点的坐标pix4=[h w 1]*rot; %变换后图像右下点的坐标height=round(max([abs(pix1(1)-pix4(1))+0.5 abs(pix2(1)-pix3(1))+0.5])); %变换后图像的高度width=round(max([abs(pix1(2)-pix4(2))+0.5 abs(pix2(2)-pix3(2))+0.5])); %变换后图像的宽度imgn=zeros(height,width);delta_y=abs(min([pix1(1) pix2(1) pix3(1) pix4(1)])); %取得y方向的负轴超出的偏移量delta_x=abs(min([pix1(2) pix2(2) pix3(2) pix4(2)])); %取得x方向的负轴超出的偏移量for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/rot; %用变换后图像的点的坐标去寻找原图像点的坐标,%否则有些变换后的图像的像素点无法完全填充float_Y=pix(1)-floor(pix(1));float_X=pix(2)-floor(pix(2));if pix(1)>=1 && pix(2)>=1 && pix(1) <= h && pix(2) <= wpix_up_left=[floor(pix(1)) floor(pix(2))]; %四个相邻的点 pix_up_right=[floor(pix(1)) ceil(pix(2))];pix_down_left=[ceil(pix(1)) floor(pix(2))];pix_down_right=[ceil(pix(1)) ceil(pix(2))];value_up_left=(1-float_X)*(1-float_Y); %计算临近四个点的权重value_up_right=float_X*(1-float_Y);value_down_left=(1-float_X)*float_Y;value_down_right=float_X*float_Y;imgn(i+delta_y,j+delta_x)=value_up_left*img(pix_up_left(1),pix_up_left(2))+ . ..value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...value_down_right*img(pix_down_right(1),pix_down_right(2));endendendfigure,imshow(uint8(imgn))等距:clear all;close all;clc;jiaodu=45; %要旋转的角度,旋转方向为顺时针img=imread('miss.bmp'); %这里v为原图像的高度,u为原图像的宽度imshow(img); %这里y为变换后图像的高度,x为变换后图像的宽度[h w]=size(img);theta=jiaodu/180*pi;rot=[exp(1)*cos(theta) -exp(1)*sin(theta) 0;exp(1)*sin(theta) exp(1)*cos(theta) 0;0 0 1];pix1=[1 1 1]*rot; %变换后图像左上点的坐标pix2=[1 w 1]*rot; %变换后图像右上点的坐标pix3=[h 1 1]*rot; %变换后图像左下点的坐标pix4=[h w 1]*rot; %变换后图像右下点的坐标height=round(max([abs(pix1(1)-pix4(1))+0.5 abs(pix2(1)-pix3(1))+0.5])); %变换后图像的高度width=round(max([abs(pix1(2)-pix4(2))+0.5 abs(pix2(2)-pix3(2))+0.5])); %变换后图像的宽度imgn=zeros(height,width);delta_y=abs(min([pix1(1) pix2(1) pix3(1) pix4(1)])); %取得y方向的负轴超出的偏移量delta_x=abs(min([pix1(2) pix2(2) pix3(2) pix4(2)])); %取得x方向的负轴超出的偏移量for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/rot; %用变换后图像的点的坐标去寻找原图像点的坐标,%否则有些变换后的图像的像素点无法完全填充float_Y=pix(1)-floor(pix(1));float_X=pix(2)-floor(pix(2));if pix(1)>=1 && pix(2)>=1 && pix(1) <= h && pix(2) <= wpix_up_left=[floor(pix(1)) floor(pix(2))]; %四个相邻的点 pix_up_right=[floor(pix(1)) ceil(pix(2))];pix_down_left=[ceil(pix(1)) floor(pix(2))];pix_down_right=[ceil(pix(1)) ceil(pix(2))];value_up_left=(1-float_X)*(1-float_Y); %计算临近四个点的权重value_up_right=float_X*(1-float_Y);value_down_left=(1-float_X)*float_Y;value_down_right=float_X*float_Y;imgn(i+delta_y,j+delta_x)=value_up_left*img(pix_up_left(1),pix_up_left(2))+ . ..value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...value_down_right*img(pix_down_right(1),pix_down_right(2));endendendfigure,imshow(uint8(imgn))。

相关文档
最新文档