实验报告 显示tif图像

实验报告 显示tif图像
实验报告 显示tif图像

(二)TIF格式概览

TIF由四个部分组成,分别为图像头文件、图像文件目录、目录入口、图像数据。1、图像头文件(Image File Header简称IFH):

图一 IFH结构描述

IFH数据结构包含3个成员共计8个字节,Byte order成员可能是“MM”(0x4d4d)或“II”(0x4949),0x4d4d表示该TIFF图是摩托罗拉整数格式 0x4949表示该图是Intel整数格式;Version成员总是包含十进制42(0x2a),它用于进一步校验该文件是否为TIF格式,42这个数并不是一般人想象中的那样认为是TIF软件的版本,实际上,42这个数大概永远不会变化;第三个成员是IFD(接下来要说的第二个数据结构)相对文件开始处的偏移量。

2、图像文件目录(Image File Directory简称IFD):

图二IFD及DE结构描述

IFD是TIF图中最重要的数据结构,它包含了一个TIF文件中最重要的信息,一个TIF图可能有多个IFD,这说明文件中有多个图像,每个IFD标识1个图像的基本属性。IFD结构中包含了三类成员,Directory Entry Count指出该结构里面有多少个目录入口;接下来就是N个线性排列的DE序列,数量不定(这就是为什么称TIF格式文件为可扩充标记的文件,甚至用户可以添加自定义的标记属性),每个DE标识了图像的某一个属性;最后就是一个偏移量,标识下一个文件目录相对于文件开始处的位置,当然,如果该TIF文件只包含了一幅图像,那么就只有一个IFD,显然,这个偏移量就等于0;

3、目录入口(Directory Entry简称DE):

共12个字节,见图二。简单说,一个DE就是一幅图像的某一个属性。例如图像的大小、分辨率、是否压缩、像素的行列数、一个像素由几位表示(1位代表黑白两色,8位代表256色等等)等。其中:tag成员是该属性的编号,在图像文件目录中,它是按照升序排列的。我们可以通过读这些编号,然后到TIF格式官方白皮书中查找相应

的含义。属性是用数据来表示的,那么type就是代表着该数据的类型,TIF官方指定的有5种数据类型。 type=1就是BYTE类型(8位无标记整数)、type=2是ASCII类型(7位ASCII码加1位二进制0)、type=3是SHORT类型(16位无标记整数)、type=4是L ONG 类型(32位无标记整数)、type=5是RATIONAL类型(2个LONG,第一个是分子,第二个是分母)。length成员是数据的数量而不是数据类型的长度。第4个成员valu eOffset很重要,它是tag标识的属性代表的变量值相对文件开始处的偏移量。如果变量值占用的空间小于4个字节,那么该值就存放在 valueOffset中即可,没必要再另外指向一个地方了

4、图像数据

本程序提供的图像是基于256灰度级的,即一个字节代表一个像素点,它是

0x00~0xff区间中256个灰度级的任意一个整数。通过使用UltraEdit工具观察,我们发现该图像文件的组织形式是:IFH--数据--IFD。以下的示例说明遵循了这一观察结果。

四、程序设计

1、VC创建一个MFC AppWizard(exe)工程取名TiffTest,选择单文档程序。

2、添加TiffStruct.h文件,定义IFH和DE结构(参考前面的结构描述),用来接收读TIF文件的信息。

#ifndef _TIFFSTRUCT_

#define _TIFFSTRUCT_

typedef struct tagIMAGEFILEHEADER

{

WORD byteOrder;

WORD version;

DWORD offsetToIFD;

}IFH;

typedef struct tagDIRECTORYENTRY

{

WORD tag;

WORD type;

DWORD length;

DWORD valueOffset;

}DE;

#endif

3、在文档类中添加4个公有变量,并将其初始化为0。在TiffTestDoc.cpp中#include "TiffStruct.h"

DWORD m_dwBmSize;//图象的数据部分的大小

CPalette m_palDIB; //BMP图象调色板

HANDLE m_hDIB;//BMP图象内存块句柄

CSize m_sizeDoc; //图象的长和宽

4、在文档类的OnOpenDocument函数中定义局部工具变量并读文件

DWORD dwFileLength = 0;

CString strTemp = _T("");

WORD wDECount = 0;

BYTE* pDIB = NULL;

int i = 0;

IFH ifh;

ZeroMemory(&ifh, sizeof(IFH));

CFile file;

CFileException fe;

if(0 == file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &fe))

{

AfxMessageBox("打开文件失败");

return FALSE;

}

dwFileLength = file.GetLength();

5、读IFH文件头

if(sizeof(IFH) != file.Read(&ifh, sizeof(IFH)))

{

AfxMessageBox("读TIF文件头失败");

return FALSE;

}

if(0x2a != ifh.version)

{

AfxMessageBox("该文件不是TIF格式,读文件失败");

return FALSE;

}

if(0x4949 != ifh.byteOrder)

{

AfxMessageBox("该TIF文件不是IBMPC字节序,读文件失败");

return FALSE;

}

file.Seek(ifh.offsetToIFD, CFile::begin);//将文件指针定位到IFD

6、读文件有多少个目录入口

if(2 != file.Read(&wDECount, 2))

{

AfxMessageBox("无法获得TIF文件目录入口数量");

return FALSE;

}

strTemp.Format("该TIF文件有%d个目录入口", wDECount);

AfxMessageBox(strTemp); //显示有多少个目录入口

7、创建DE数组,接收信息,数组中有wDECount个元素

DE* pde = new DE[wDECount];

DE* pTemp = pde;

memset(pde, 0, sizeof(DE)*wDECount);

if(sizeof(DE)*wDECount != file.ReadHuge(pde, sizeof(DE)*wDECount)) {

AfxMessageBox("读图象文件目录失败");

delete []pde;

return FALSE;

}

8、显示图像文件目录信息

for(i=0; i

{

pTemp = pde + i;

strTemp.Format("DE[%d].tag = %d\r\nDE[%d].type = %d\r\nDE[%d].length = %d\r\nDE[%d].valueOffset=%d",i,pTemp->tag,i,pTemp->type,i,pTemp->length,i,pTemp->valu eOffset);

AfxMessageBox(strTemp);//显示目录文件信息

}

9、把图像的大小和图像数据的容量保存到成员变量中

for(i=0; i

{

pTemp = pde + i;

if(256 == pTemp->tag)//tag为256的目录入口中的变量标识了图象宽度

{

m_sizeDoc.cx = pTemp->valueOffset;

}

if(257 == pTemp->tag)// tag为257的目录入口中的变量标识了图象长度

{

m_sizeDoc.cy = pTemp->valueOffset;

}

if(273 == pTemp->tag)//计算图象数据占用字节数

{

m_dwBmSize = m_sizeDoc.cx * m_sizeDoc.cy;

}

}

10、在文档类中创建一个成员工具函数CreateBmpBuffer,申请全局内存块以存放BMP 文件结构数据

BOOL CTiffTestDoc::CreateBmpBuffer()

{

//申请BMP内存块

m_hDIB = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,

sizeof(BITMAPFILEHEADER) +

sizeof(BITMAPINFOHEADER) +

256*sizeof(RGBQUAD) +

m_dwBmSize);

if(NULL == m_hDIB)

{

AfxMessageBox("申请BMP内存块失败");

return FALSE;

}

else

{

return TRUE;

}

}

11、回到OnOpenDocument成员函数中调用工具函数并获得全局内存块指针//构造BMP图象内存块

if(!CreateBmpBuffer())

{

AfxMessageBox("构造BMP图象内存块失败");

delete []pde;

return FALSE;

}

//获得BMP内存块指针

pDIB = (BYTE*)GlobalLock(m_hDIB);

if(NULL == pDIB)

{

AfxMessageBox("获得BMP内存块指针失败");

GlobalUnlock(m_hDIB);

delete []pde;

return FALSE;

}

12、将图像信息填充到BMP内存块中,(注:BMP文件中图像数据的第一行代表的是最终显示光栅的最后一行,所以在数据排列中要颠倒过来。)

//构造BITMAPFILEHEADER并复制到BMP内存块

BITMAPFILEHEADER bmfHdr;

memset(&bmfHdr, 0, sizeof(BITMAPFILEHEADER));

bmfHdr.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +

256*sizeof(RGBQUAD);

bmfHdr.bfReserved1 = 0;

bmfHdr.bfReserved2 = 0;

bmfHdr.bfSize = bmfHdr.bfOffBits + m_dwBmSize;

bmfHdr.bfType = 0x4d42;

memmove(pDIB, &bmfHdr, sizeof(BITMAPFILEHEADER));

//构造BITMAPINFOHEADER并复制到BMP内存块

BITMAPINFOHEADER bmiHdr;

memset(&bmiHdr, 0, sizeof(BITMAPINFOHEADER));

bmiHdr.biBitCount = 8;

bmiHdr.biClrImportant = 0;

bmiHdr.biClrUsed = 0;

bmiHdr.biCompression = 0;

bmiHdr.biHeight = m_sizeDoc.cy;

bmiHdr.biPlanes = 1;

bmiHdr.biSize = sizeof(BITMAPINFOHEADER);

bmiHdr.biSizeImage = 0;

bmiHdr.biWidth = m_sizeDoc.cx;

bmiHdr.biXPelsPerMeter = 2834;

bmiHdr.biYPelsPerMeter = 2834;

memmove((BITMAPFILEHEADER*)pDIB + 1, &bmiHdr, sizeof(BITMAPINFOHEADER));

//构造256个RGBQUAD并复制到BMP内存块

RGBQUAD* pRgbQuad = (RGBQUAD*)(pDIB + sizeof(BITMAPFILEHEADER) +

sizeof(BITMAPINFOHEADER));

RGBQUAD* pOldQuad = pRgbQuad;

RGBQUAD rgbQuad;

memset(&rgbQuad, 0, sizeof(RGBQUAD));

for(i=0; i<256; i++)

{

rgbQuad.rgbBlue = i;

rgbQuad.rgbGreen = i;

rgbQuad.rgbRed = i;

rgbQuad.rgbReserved = 0;

pRgbQuad = pOldQuad + i;

memmove(pRgbQuad, &rgbQuad, sizeof(RGBQUAD));

}

//填充所有像素数据, 颠倒图象数据从最后一行开始读起

int j = 0;

for(i=m_sizeDoc.cy-1; i>=0; i--)

{

file.Seek(sizeof(IFH) + i*m_sizeDoc.cx, CFile::begin);

file.Read((BYTE*)(pRgbQuad + 1) + j*m_sizeDoc.cx, m_sizeDoc.cx);

j++;

}

13、初始化BMP调色板,为显示BMP文件做准备

//初始化专用调色板

BYTE buf[2+2+4*256];

LOGPALETTE* pPal = (LOGPALETTE*)buf;

pPal->palVersion = 0x300;

pPal->palNumEntries = 256;

for(i=0; i<255; i++)

{

pPal->palPalEntry[i].peBlue = i;

pPal->palPalEntry[i].peFlags = 0;

pPal->palPalEntry[i].peGreen = i;

pPal->palPalEntry[i].peRed = i;

}

m_palDIB.CreatePalette(pPal);

14、(附加功能)生成bmp文件

CFile fileWrite("C:\Documents and Settings\Administrator\桌面\mytiff.bmp", CFile::modeCreate | CFile::modeWrite);

fileWrite.WriteHuge(pDIB, sizeof(BITMAPFILEHEADER) +

sizeof(BITMAPINFOHEADER) + 256*sizeof(RGBQUAD) + m_dwBmSize);

15、OnOpenDocument成员函数返回前的清理工作

GlobalUnlock(m_hDIB);

delete []pde;

return TRUE;

至此,TIF文件信息已转换为BMP图像并保存在全局内存块中了,接下来就可以在OnDraw中调用WinAPI函数StretchDIBits来显示它。

流程图:

八、附录

核心源代码:

BOOL CTiffViewDoc::OnOpenDocument(LPCTSTR lpszPathName)

{

if (!CDocument::OnOpenDocument(lpszPathName))

return FALSE;

/*初始化*/

DWORD dwFileLength = 0;

CString strTemp = _T("");

WORD wDECount = 0;

BYTE* pDIB = NULL;

int i = 0;

IFH ifh;

ZeroMemory(&ifh, sizeof(IFH));//将IFH对应变量的空间大小赋予ifh

CFile file;//定义文件

CFileException fe;

if(0 == file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &fe)) {

AfxMessageBox("打开文件失败");

return FALSE;

}

dwFileLength = file.GetLength();//读取文件长度赋值

if(sizeof(IFH) != file.Read(&ifh, sizeof(IFH)))//判断规模是否相同(字节)

{

AfxMessageBox("读TIF文件头失败");

return FALSE;

}

if(0x2a != ifh.version)

{

AfxMessageBox("该文件不是TIF格式,读文件失败");

return FALSE;

}

if(0x4949 != ifh.byteOrder)//判断整数格式

{

AfxMessageBox("该TIF文件不是IBMPC字节序,读文件失败");

return FALSE;

}

file.Seek(ifh.offsetToIFD, CFile::begin);//寻找偏移量(找目录)

if(2 != file.Read(&wDECount, 2))

{

AfxMessageBox("无法获得TIF文件目录入口数量");

return FALSE;

}

strTemp.Format("该TIF文件有%d个目录入口", wDECount);

//AfxMessageBox(strTemp);//显示具体的入口数

DE* pde = new DE[wDECount];

DE* pTemp = pde;

memset(pde, 0, sizeof(DE)*wDECount);//初始化pde(置零大小不变)

if(sizeof(DE)*wDECount != file.ReadHuge(pde, sizeof(DE)*wDECount))

{

AfxMessageBox("读图象文件目录失败");

delete []pde;

return FALSE;

}

//显示图象目录入口信息--测试用

for(i=0; i

{

pTemp = pde + i;

strTemp.Format("DE[%d].tag = %d\r\nDE[%d].type = %d\r\nDE[%d].length = %d\r\nDE[%d].valueOffset = %d",

i, pTemp->tag, i, pTemp->type, i, pTemp->length, i, pTemp->valueOffset);

// AfxMessageBox(strTemp);

}

for(i=0; i

{

pTemp = pde + i;

if(256 == pTemp->tag) //图象宽度

{

m_sizeDoc.cx = pTemp->valueOffset;

}

if(257 == pTemp->tag) //图象高度

{

m_sizeDoc.cy = pTemp->valueOffset;

}

if(273 == pTemp->tag) //计算图象数据占用字节数

{

//m_dwBmSize = pTemp->valueOffset - sizeof(IFH);

//或者把tag=256的valueOffset乘以tag=257的valueOffset

m_dwBmSize = m_sizeDoc.cx * m_sizeDoc.cy;

}

}

//构造BMP图象内存块

if(!CreateBmpBuffer())

{

AfxMessageBox("构造BMP图象内存块失败");

delete []pde;

return FALSE;

}

//获得BMP内存块指针

pDIB = (BYTE*)GlobalLock(m_hDIB);//共用一个地址

if(NULL == pDIB)

{

AfxMessageBox("获得BMP内存块指针失败");

GlobalUnlock(m_hDIB);//解除之前的共用

delete []pde;

return FALSE;

}

//构造BITMAPFILEHEADER并复制到BMP内存块bmp文件头

BITMAPFILEHEADER bmfHdr;

memset(&bmfHdr, 0, sizeof(BITMAPFILEHEADER));

bmfHdr.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +256*sizeof(RGBQUAD);

bmfHdr.bfReserved1 = 0;

bmfHdr.bfReserved2 = 0;

bmfHdr.bfSize = bmfHdr.bfOffBits + m_dwBmSize;

bmfHdr.bfType = 0x4d42;

memmove(pDIB, &bmfHdr, sizeof(BITMAPFILEHEADER));//取bmfHdr中的放到DIB中

//构造BITMAPINFOHEADER并复制到BMP内存块位图信息头

BITMAPINFOHEADER bmiHdr;

memset(&bmiHdr, 0, sizeof(BITMAPINFOHEADER));

bmiHdr.biBitCount = 8;

bmiHdr.biClrImportant = 0;

bmiHdr.biClrUsed = 0;

bmiHdr.biCompression = 0;

bmiHdr.biHeight = m_sizeDoc.cy;

bmiHdr.biPlanes = 1;

bmiHdr.biSize = sizeof(BITMAPINFOHEADER);

bmiHdr.biSizeImage = 0;

bmiHdr.biWidth = m_sizeDoc.cx;

bmiHdr.biXPelsPerMeter = 2834;

bmiHdr.biYPelsPerMeter = 2834;

memmove((BITMAPFILEHEADER*)pDIB + 1, &bmiHdr, sizeof(BITMAPINFOHEADER));

//构造256个RGBQUAD并复制到BMP内存块像素

RGBQUAD* pRgbQuad = (RGBQUAD*)(pDIB + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER));

RGBQUAD* pOldQuad = pRgbQuad;

RGBQUAD rgbQuad;

memset(&rgbQuad, 0, sizeof(RGBQUAD));

for(i=0; i<256; i++)

{

rgbQuad.rgbBlue = i;

rgbQuad.rgbGreen = i;

rgbQuad.rgbRed = i;

rgbQuad.rgbReserved = 0;

pRgbQuad = pOldQuad + i;

memmove(pRgbQuad, &rgbQuad, sizeof(RGBQUAD));

}

//填充所有像素数据, 颠倒图象数据从最后一行开始读起(阵列中的第一个字节表示位图左下角的象素,而最后一个字节表示位图右上角的象素。)

int j = 0;

for(i=m_sizeDoc.cy-1; i>=0; i--)

{

file.Seek(sizeof(IFH) + i*m_sizeDoc.cx, CFile::begin);

file.Read((BYTE*)(pRgbQuad + 1) + j*m_sizeDoc.cx, m_sizeDoc.cx);

j++;

}

//初始化专用调色板

BYTE buf[2+2+4*256];

LOGPALETTE* pPal = (LOGPALETTE*)buf;

pPal->palVersion = 0x300;

pPal->palNumEntries = 256;

for(i=0; i<255; i++)

{

pPal->palPalEntry[i].peBlue = i;

pPal->palPalEntry[i].peFlags = 0;

pPal->palPalEntry[i].peGreen = i;

pPal->palPalEntry[i].peRed = i;

}

m_palDIB.CreatePalette(pPal);//建立调色板

//测试BMP图象

/* CFile fileWrite("mytiff.bmp", CFile::modeCreate | CFile::modeWrite);

fileWrite.WriteHuge(pDIB, sizeof(BITMAPFILEHEADER) +

sizeof(BITMAPINFOHEADER) + 256*sizeof(RGBQUAD) + m_dwBmSize);

*/

GlobalUnlock(m_hDIB);//释放m_hDIB

delete []pde;

return TRUE;

}

BOOL CTiffViewDoc::CreateBmpBuffer()

{

//申请BMP内存块

m_hDIB = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,

sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 256*sizeof(RGBQUAD) + m_dwBmSize);

if(NULL == m_hDIB)

{

AfxMessageBox("申请BMP内存块失败");

return FALSE;

}

else

{

return TRUE;

}

}

数字图像处理图像复原实验报告

图像复原信息132李佳奇1304010311 一、实验目的 1、熟悉并掌握MATLAB图像处理工具箱的使用; 2、理解并掌握常用的图像的恢复和分割技术。 二、实验内容 close all;clear all;clc; I=imread('d:/zhien.jpg'); I=im2double(I); I=imnoise(I,'gaussian',0.05);%添加高斯噪声 PSF=fspecial('average',3); J=imfilter(I,PSF); K=exp(imfilter(log(I),PSF)); figure; subplot(131);imshow(I); subplot(132);imshow(J); subplot(133);imshow(K); 维纳滤波 I=imread('d:/zhien.jpg'); H=fspecial('motion',50,45); J=imfilter(I,H,'circular','conv'); subplot(221);imshow(J); title('运动模糊后的lena.bmp(角度为45)'); J1=imnoise(J,'gaussian',0,0.01); subplot(222); imshow(J1); title('加噪模糊的lena.bmp');%figure; J2=deconvwnr(J1,H); subplot(223) imshow(J2); title('模糊噪声图像的维纳滤波复原'); noise=imnoise(zeros(size(I)),'gaussian',0,0.01); NSR=sum(noise(:).^2)/sum(im2double(I(:)).^2); J3=deconvwnr(J1,H,NSR);

数字图像处理实验报告

数字图像处理实验报告 实验一数字图像基本操作及灰度调整 一、实验目的 1)掌握读、写图像的基本方法。 2)掌握MATLAB语言中图像数据与信息的读取方法。 3)理解图像灰度变换处理在图像增强的作用。 4)掌握绘制灰度直方图的方法,理解灰度直方图的灰度变换及均衡化的方 法。 二、实验内容与要求 1.熟悉MATLAB语言中对图像数据读取,显示等基本函数 特别需要熟悉下列命令:熟悉imread()函数、imwrite()函数、size()函数、Subplot()函数、Figure()函数。 1)将MATLAB目录下work文件夹中的forest.tif图像文件读出.用到imread, imfinfo 等文件,观察一下图像数据,了解一下数字图像在MATLAB中的处理就是处理一个矩阵。将这个图像显示出来(用imshow)。尝试修改map颜色矩阵的值,再将图像显示出来,观察图像颜色的变化。 2)将MATLAB目录下work文件夹中的b747.jpg图像文件读出,用rgb2gray() 将其 转化为灰度图像,记为变量B。 2.图像灰度变换处理在图像增强的作用 读入不同情况的图像,请自己编程和调用Matlab函数用常用灰度变换函数对输入图像进行灰度变换,比较相应的处理效果。 3.绘制图像灰度直方图的方法,对图像进行均衡化处理 请自己编程和调用Matlab函数完成如下实验。 1)显示B的图像及灰度直方图,可以发现其灰度值集中在一段区域,用 imadjust函 数将它的灰度值调整到[0,1]之间,并观察调整后的图像与原图像的差别,调整后的灰

度直方图与原灰度直方图的区别。 2) 对B 进行直方图均衡化处理,试比较与源图的异同。 3) 对B 进行如图所示的分段线形变换处理,试比较与直方图均衡化处理的异同。 图1.1 分段线性变换函数 三、实验原理与算法分析 1. 灰度变换 灰度变换是图像增强的一种重要手段,它常用于改变图象的灰度范围及分布,是图象数字化及图象显示的重要工具。 1) 图像反转 灰度级范围为[0, L-1]的图像反转可由下式获得 r L s --=1 2) 对数运算:有时原图的动态范围太大,超出某些显示设备的允许动态范围, 如直接使用原图,则一部分细节可能丢失。解决的方法是对原图进行灰度压缩,如对数变换: s = c log(1 + r ),c 为常数,r ≥ 0 3) 幂次变换: 0,0,≥≥=γγc cr s 4) 对比拉伸:在实际应用中,为了突出图像中感兴趣的研究对象,常常要求 局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理,即分段线性拉伸: 其对应的数学表达式为:

北航数字图象处理实验报告

数字图像处理实验报告 实验二图像变换实验 1.实验目的 学会对图像进行傅立叶等变换,在频谱上对图像进行分析,增进对图像频域上的感性认识,并用图像变换进行压缩。 2.实验内容 对Lena或cameraman图像进行傅立叶、离散余弦、哈达玛变换。在频域,对比他们的变换后系数矩阵的频谱情况,进一步,通过逆变换观察不同变换下的图像重建质量情况。 3. 实验要求 实验采用获取的图像,为灰度图像,该图像每象素由8比特表示。具体要求如下: (1)输入图像采用实验1所获取的图像(Lena、Cameraman); (2)对图像进行傅立叶变换、获得变换后的系数矩阵; (3)将傅立叶变换后系数矩阵的频谱用图像输出,观察频谱; (4)通过设定门限,将系数矩阵中95%的(小值)系数置为0,对图像进行反变换,获得逆变换后图像; (5)观察逆变换后图像质量,并比较原始图像与逆变后的峰值信噪比(PSNR)。 (6)对输入图像进行离散余弦、哈达玛变换,重复步骤1-5; (7)比较三种变换的频谱情况、以及逆变换后图像的质量(PSNR)。 4. 实验结果 1. DFT的源程序及结果 J=imread('10021033.bmp'); P=fft2(J); for i=0:size(P,1)-1 for j=1:size(P,2) G(i*size(P,2)+j)=P(i+1,j); end end Q=sort(G); for i=1:size(Q,2) if (i=size(Q,2)*0.95) t=Q(i); end end G(abs(G)

matlab图像处理实验报告

图像处理实验报告 姓名:陈琼暖 班级:07计科一班 学号:20070810104

目录: 实验一:灰度图像处理 (3) 实验二:灰度图像增强 (5) 实验三:二值图像处理 (8) 实验四:图像变换 (13) 大实验:车牌检测 (15)

实验一:灰度图像处理题目:直方图与灰度均衡 基本要求: (1) BMP灰度图像读取、显示、保存; (2)编程实现得出灰度图像的直方图; (3)实现灰度均衡算法. 实验过程: 1、BMP灰度图像读取、显示、保存; ?图像的读写与显示操作:用imread( )读取图像。 ?图像显示于屏幕:imshow( ) 。 ?

2、编程实现得出灰度图像的直方图; 3、实现灰度均衡算法; ?直方图均衡化可用histeq( )函数实现。 ?imhist(I) 显示直方图。直方图中bin的数目有图像的类型决定。如果I是个灰度图像,imhist将 使用默认值256个bins。如果I是一个二值图像,imhist使用两bins。 实验总结: Matlab 语言是一种简洁,可读性较强的高效率编程软件,通过运用图像处理工具箱中的有关函数,就可以对原图像进行简单的处理。 通过比较灰度原图和经均衡化后的图形可见图像变得清晰,均衡化后的直方图形状比原直方图的形状更理想。

实验二:灰度图像增强 题目:图像平滑与锐化 基本要求: (1)使用邻域平均法实现平滑运算; (2)使用中值滤波实现平滑运算; (3)使用拉普拉斯算子实现锐化运算. 实验过程: 1、 使用邻域平均法实现平滑运算; 步骤:对图像添加噪声,对带噪声的图像数据进行平滑处理; ? 对图像添加噪声 J = imnoise(I,type,parameters)

东南大学数字图像处理实验报告

数字图像处理 实验报告 学号:04211734 姓名:付永钦 日期:2014/6/7 1.图像直方图统计 ①原理:灰度直方图是将数字图像的所有像素,按照灰度值的大小,统计其所出现的频度。 通常,灰度直方图的横坐标表示灰度值,纵坐标为半个像素个数,也可以采用某一灰度值的像素数占全图像素数的百分比作为纵坐标。 ②算法: clear all PS=imread('girl-grey1.jpg'); %读入JPG彩色图像文件figure(1);subplot(1,2,1);imshow(PS);title('原图像灰度图'); [m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255 GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率end figure(1);subplot(1,2,2);bar(0:255,GP,'g') %绘制直方图 axis([0 255 min(GP) max(GP)]); title('原图像直方图') xlabel('灰度值') ylabel('出现概率') ③处理结果:

原图像灰度图 100 200 0.005 0.010.0150.020.025 0.030.035 0.04原图像直方图 灰度值 出现概率 ④结果分析:由图可以看出,原图像的灰度直方图比较集中。 2. 图像的线性变换 ①原理:直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值(即对画面起主 要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。从而达到清晰图像的目的。 ②算法: clear all %一,图像的预处理,读入彩色图像将其灰度化 PS=imread('girl-grey1.jpg'); figure(1);subplot(2,2,1);imshow(PS);title('原图像灰度图'); %二,绘制直方图 [m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255

图像处理 实验报告

摘要: 图像处理,用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。基本内容图像处理一般指数字图像处理。数字图像是指用数字摄像机、扫描仪等设备经过采样和数字化得到的一个大的二维数组,该数组的元素称为像素,其值为一整数,称为灰度值。图像处理技术的主要内容包括图像压缩,增强和复原,匹配、描述和识别3个部分。图像处理一般指数字图像处理。 数字图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。目前,图像处理演示系统应用领域广泛医学、军事、科研、商业等领域。因为数字图像处理技术易于实现非线性处理,处理程序和处理参数可变,故是一项通用性强,精度高,处理方法灵活,信息保存、传送可靠的图像处理技术。本图像处理演示系统以数字图像处理理论为基础,对某些常用功能进行界面化设计,便于初级用户的操作。 设计要求 可视化界面,采用多幅不同形式图像验证系统的正确性; 合理选择不同形式图像,反应各功能模块的效果及验证系统的正确性 对图像进行灰度级映射,对比分析变换前后的直方图变化; 1.课题目的与要求 目的: 基本功能:彩色图像转灰度图像 图像的几何空间变换:平移,旋转,剪切,缩放 图像的算术处理:加、减、乘 图像的灰度拉伸方法(包含参数设置); 直方图的统计和绘制;直方图均衡化和规定化; 要求: 1、熟悉图像点运算、代数运算、几何运算的基本定

义和常见方法; 2、掌握在MTLAB中对图像进行点运算、代数运算、几何运算的方法 3、掌握在MATLAB中进行插值的方法 4、运用MATLAB语言进行图像的插值缩放和插值旋转等 5、学会运用图像的灰度拉伸方法 6、学会运用图像的直方图设计和绘制;以及均衡化和规定化 7、进一步熟悉了解MATLAB语言的应用,将数字图像处理更好的应用于实际2.课题设计内容描述 1>彩色图像转化灰度图像: 大部分图像都是RGB格式。RGB是指红,绿,蓝三色。通常是每一色都是256个级。相当于过去摄影里提到了8级灰阶。 真彩色图像通常是就是指RGB。通常是三个8位,合起来是24位。不过每一个颜色并不一定是8位。比如有些显卡可以显示16位,或者是32位。所以就有16位真彩和32位真彩。 在一些特殊环境下需要将真彩色转换成灰度图像。 1单独处理每一个颜色分量。 2.处理图像的“灰度“,有时候又称为“高度”。边缘加强,平滑,去噪,加 锐度等。 3.当用黑白打印机打印照片时,通常也需要将彩色转成灰白,处理后再打印 4.摄影里,通过黑白照片体现“型体”与“线条”,“光线”。 2>图像的几何空间变化: 图像平移是将图像进行上下左右的等比例变化,不改变图像的特征,只改变位置。 图像比例缩放是指将给定的图像在x轴方向按比例缩放fx倍,在y轴按比例缩放fy倍,从而获得一幅新的图像。如果fx=fy,即在x轴方向和y轴方向缩放的比率相同,称这样的比例缩放为图像的全比例缩放。如果fx≠fy,图像的比例缩放会改变原始图象的像素间的相对位置,产生几何畸变。 旋转。一般图像的旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个相同的角度。旋转后图像的的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像范围来显示所有的图像。图像的旋转变换也可以用矩阵变换来表示。

图像处理实验报告

重庆交通大学 学生实验报告 实验课程名称数字图像处理 开课实验室数学实验室 学院理学院年级信息与计算科学专业 2 班学生姓名李伟凯学号631122020203 开课时间2014 至2015 学年第 1 学期

实验(一)图像处理基础 ?实验目的 学习Matlab软件的图像处理工具箱,掌握常用的一些图像处理命令;通过编程实现几种简单的图像增强算法,加强对图像增强的理解。 ?实验内容 题目A.打开Matlab软件帮助,学习了解Matlab中图像处理工具箱的基本功能;题目B.掌握以下常见图像处理函数的使用: imread( ) imageinfo( ) imwrite( ) imopen( ) imclose( ) imshow( ) impixel( ) imresize( ) imadjust( ) imnoise( ) imrotate( ) im2bw( ) rgb2gray( ) 题目C.编程实现对图像的线性灰度拉伸y = ax + b,函数形式为:imstrech(I, a, b); 题目D.编程实现对图像进行直方图均衡化处理,并将实验结果与Matab中imhist 命令结果比较。 三、实验结果 1).基本图像处理函数的使用: I=imread('rice.png'); se = strel('disk',1); I_opened = imopen(I,se); %对边缘进行平滑 subplot(1,2,1), imshow(I), title('原始图像') subplot(1,2,2), imshow(I_opened), title('平滑图像') 原始图像平滑图像

数字图像处理图像复原实验报告

图像复原 信息132 李佳奇 1304010311 一、实验目的 1、熟悉并掌握MATLAB 图像处理工具箱的使用; 2、理解并掌握常用的图像的恢复与分割技术。 二、实验内容 空域滤波复原 close all;clear all;clc; I=imread('d:/zhien 、jpg'); I=im2double(I); I=imnoise(I,'gaussian',0、05);%添加高斯噪声 PSF=fspecial('average',3); J=imfilter(I,PSF); K=exp(imfilter(log(I),PSF)); figure; subplot(131);imshow(I); subplot(132);imshow(J); subplot(133);imshow(K); 维纳滤波 I=imread('d:/zhien 、jpg'); H=fspecial('motion',50,45); J=imfilter(I,H,'circular','conv'); subplot(221);imshow(J); title('运动模糊后的lena 、bmp(角度为45)'); J1=imnoise(J,'gaussian',0,0、01); subplot(222); imshow(J1); title('加噪模糊的lena 、bmp');%figure; J2=deconvwnr(J1,H); subplot(223) imshow(J2); title('模糊噪声图像的维纳滤波复原'); noise=imnoise(zeros(size(I)),'gaussian',0,0、01); NSR=sum(noise(:)、^2)/sum(im2double(I(:))、^2); J3=deconvwnr(J1,H,NSR); subplot(224) imshow(J3); title('引入SNR 的维纳滤波复原'); 分析:空域滤波就就是在待处理图像中逐点地移动掩模。在每一点(x,y)处,滤波器在该点的响应通过事先定义的关系来计算。对于线性空间滤波,其响应由滤波器系数与滤波掩模扫过区域的相应像素值的乘积之与给出

数字图像处理实验报告

数字图像处理试验报告 实验二:数字图像的空间滤波和频域滤波 姓名:XX学号:2XXXXXXX 实验日期:2017 年4 月26 日 1.实验目的 1. 掌握图像滤波的基本定义及目的。 2. 理解空间域滤波的基本原理及方法。 3. 掌握进行图像的空域滤波的方法。 4. 掌握傅立叶变换及逆变换的基本原理方法。 5. 理解频域滤波的基本原理及方法。 6. 掌握进行图像的频域滤波的方法。 2.实验内容与要求 1. 平滑空间滤波: 1) 读出一幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图显示在同一 图像窗口中。 2) 对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,要 求在同一窗口中显示。 3) 使用函数 imfilter 时,分别采用不同的填充方法(或边界选项,如零填 充、’replicate’、’symmetric’、’circular’)进行低通滤波,显示处理后的图 像。 4) 运用 for 循环,将加有椒盐噪声的图像进行 10 次,20 次均值滤波,查看其特点, 显 示均值处理后的图像(提示:利用fspecial 函数的’average’类型生成均值滤波器)。 5) 对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处理,要 求在同一窗口中显示结果。 6) 自己设计平滑空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。 2. 锐化空间滤波 1) 读出一幅图像,采用3×3 的拉普拉斯算子 w = [ 1, 1, 1; 1 – 8 1; 1, 1, 1] 对其进行滤波。 2) 编写函数w = genlaplacian(n),自动产生任一奇数尺寸n 的拉普拉斯算子,如5 ×5的拉普拉斯算子 w = [ 1 1 1 1 1 1 1 1 1 1 1 1 -24 1 1 1 1 1 1 1 1 1 1 1 1] 3) 分别采用5×5,9×9,15×15和25×25大小的拉普拉斯算子对

数字图像处理实验(2011年)

数字图像处理实验一 图像变换 一、实验目的 了解matlab有关图像的基本操作,如图像的读写,显示等。掌握二维DFT变换及其物理意义,掌握基本的灰度变换方法。 二、实验要求 1.在Matlab workspace中生成一幅大小为512×512像素的8位灰度图, 背景为黑色, 中心有一个宽40像素高20像素的白色矩形。如下图所示: 2.将这幅图像保存为文件test.bmp。 3.从文件test.bmp中读出图像到变量I。 4.在Matlab图形界面中显示变量I所代表的图像。 5.对I作二维DFT变换,结果保存到变量F。注意将频域原点调整至中心位置。 6.将傅立叶频谱,即|F|的取值范围调整为0-255并显示。 7.将上题结果作对数变换后再进行显示,结果应与课本Figure 4.3(b)一致。说明对数 变换能使频谱显示效果更好的原因。 8.对频谱图的物理意义作简要说明。

三、 实验流程 四、 理论知识 1. 在8位灰度图中,像素值大小为0-255。0代表黑色,255代表白色。 2. 二 维 DFT 计 算 公 式 为 ∑∑-=-=+-?=101 )]//(2exp[),(1),(M x N y N vy M ux j y x f MN v u F π。 由于二维DFT 是一种行列可分离的变换,其结果也可以由在两个方向上先后做一维DFT 得到。具体流程为: (a ) 对图像每一行(即某个x 值),做一维DFT ,得到的结果保存为矩阵) ,(v x F 的一行。 ∑-=-?=1 )]/2exp(),(1),(N y N vy j y x f N v x F π (b ) 对矩阵),(v x F 的每一列(即某个v 值),做一维DFT ,得到的结果保存为 矩阵),(v u F 的一列。 )/2exp(),(1 ),(10 M ux j v x F M v u F M x π-?= ∑-= 3. 直接对图像),(y x f 做傅立叶变换,结果的原点处于图像左下角。将傅立叶变换结

数字图像处理实验报告

数字图像处理实验 报告 学生姓名:学号: 专业年级: 09级电子信息工程二班

实验一常用MATLAB图像处理命令 一、实验内容 1、读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。 实验结果如右图: 代码如下: Subplot (1,3,1) i=imread('E:\数字图像处理\2.jpg') imshow(i) title('RGB') Subplot (1,3,2) j=rgb2gray(i) imshow(j) title('灰度') Subplot (1,3,3) k=im2bw(j,0.5) imshow(k) title('二值') 2、对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字标题。 实验结果如右图: 代码如下: Subplot (3,2,1) i=imread('E:\数字图像处理 \16.jpg') x=imresize(i,[250,320]) imshow(x) title('原图x') Subplot (3,2,2) j=imread(''E:\数字图像处理 \17.jpg') y=imresize(j,[250,320]) imshow(y) title('原图y') Subplot (3,2,3) z=imadd(x,y) imshow(z)

title('相加结果');Subplot (3,2,4);z=imsubtract(x,y);imshow(z);title('相减结果') Subplot (3,2,5);z=immultiply(x,y);imshow(z);title('相乘结果') Subplot (3,2,6);z=imdivide(x,y);imshow(z);title('相除结果') 3、对一幅图像进行灰度变化,实现图像变亮、变暗和负片效果,在同一个窗口内分成四个子窗口来分别显示,注上文字标题。 实验结果如右图: 代码如下: Subplot (2,2,1) i=imread('E:\数字图像处理 \23.jpg') imshow(i) title('原图') Subplot (2,2,2) J = imadjust(i,[],[],3); imshow(J) title('变暗') Subplot (2,2,3) J = imadjust(i,[],[],0.4) imshow(J) title('变亮') Subplot (2,2,4) J=255-i Imshow(J) title('变负') 二、实验总结 分析图像的代数运算结果,分别陈述图像的加、减、乘、除运算可能的应用领域。 解答:图像减运算与图像加运算的原理和用法类似,同样要求两幅图像X、Y的大小类型相同,但是图像减运算imsubtract()有可能导致结果中出现负数,此时系统将负数统一置为零,即为黑色。 乘运算实际上是对两幅原始图像X、Y对应的像素点进行点乘(X.*Y),将结果输出到矩阵Z中,若乘以一个常数,将改变图像的亮度:若常数值大于1,则乘运算后的图像将会变亮;叵常数值小于是,则图像将会会暗。可用来改变图像的灰度级,实现灰度级变换,也可以用来遮住图像的某些部分,其典型应用是用于获得掩膜图像。 除运算操作与乘运算操作互为逆运算,就是对两幅图像的对应像素点进行点(X./Y), imdivide()同样可以通过除以一个常数来改变原始图像的亮度,可用来改变图像的灰度级,其典型运用是比值图像处理。 加法运算的一个重要应用是对同一场景的多幅图像求平均值 减法运算常用于检测变化及运动的物体,图像相减运算又称为图像差分运算,差分运算还可以用于消除图像背景,用于混合图像的分离。

东北大学图像处理实验报告

计算机图像处理实验报告 哈哈哈哈哈哈实验台31 1.应用MATLAB语言编写显示一幅灰度图像、二值图像、索引图像及 彩色图像的程序,并进行相互之间的转换 1)彩色图像转换为灰度图像、索引图像、二值图像 A=imread('F:\colorful.jpg'); subplot(221);imshow(A);title('彩色图像'); I1=rgb2gray(A); subplot(222);imshow(I1);title('灰度图像'); [X1,map]=rgb2ind(A,256); subplot(223);imshow(X1);title('索引图像'); BW=im2bw(A); subplot(224);imshow(BW);title('二值图像'); 彩色图像灰度图像 索引图像二值图像

2)灰度图像转换为索引图像、二值图像 clear A=imread('F:\colorful.jpg'); B=rgb2gray(A); subplot(131);imshow(B);title('灰度图像'); [X2,map]=gray2ind(B,128); subplot(132);imshow(X2);title('索引图像'); BW2=im2bw(B); subplot(133);imshow(BW2);title('二值图像'); 灰度图像索引图像二值图像 3)索引图像转为灰度图像、二值图像、彩色图像 clear A=imread('F:\colorful.jpg'); [X,map]=rgb2ind(A,256); subplot(221);imshow(X);title('索引图像'); I3=ind2gray(X,map); subplot(222);imshow(I3);title('灰度图像'); BW3=im2bw(X,map,0.5); subplot(223);imshow(BW3);title('二值图像'); RGB=ind2rgb(X,map); subplot(24);imshow(RGB);title('还原彩色图像'); 索引图像灰度图像 二值图像还原彩色图像

图像处理实验报告模板

桂林电子科技大学 实验报告 一、实验目的 1、掌握基本的图像处理方法,包括读取、写入、显示、剪切、运算以及快操作 等等。 2、掌握常用的图像变换方法,分析变换结果。 二、实验内容 编写程序,在Matlab下调试运行,并注意观察分析结果。 1、使用imread函数分别读入图象cameraman.tif 、canoe.tif,并使用subplot 和imshow函数进行显示。再使用imcrop对第一幅图片进行剪切,并保存成文件。 2、申明向量X和矩阵A,使用二维傅立叶变换和fftshift函数进行处理,观察向量和矩阵结果。 3、创建一个1000*1000的全0图像,其中选择某矩形区域设置其象素为1(350:649,475:524),对该二值图逆时针旋转45°角,比较旋转前后的图像和傅里叶变换频谱。 三、实验设备、环境 计算机 四、实验原理 1、图像平滑算法 (1) 简单平均法:

设某像素的灰度值为,迭加噪声后,一幅含噪声的图像可表示为 现取以为中心的邻域S ——NN 方形窗口,在S 域内进行局部平均,得 式中,N 的平方为窗口内像素总数。令 ,则 式中,加权函数 (2)中值滤波: 中值滤波是一种非线性的信号处理方法。中值滤波器在1971 年由J.w.Jukey 首先提出并应用在一维信号处理技术(时间序列分析)中,后来被二维图象信号处理技术所引用。中值滤波在一定的条件下可以克服线性滤波器如最小均方滤波、均直滤波等带来的图象细节模糊,而且对滤除脉冲干扰及图象扫描噪声最为有效。由于在实际运算过程中不需要图象的统计特征,因此这也带来不少方便。但是对于一些细节多,特别是点、线、尖顶细节多的图象不宜采用中值滤波。中值滤波一般采用一个含有奇数个点的滑动窗口,将窗口中各点灰度值的中值来替代值定点(一般是窗口的中心点)的灰度值。对于奇数个元素,中值是指按大小排序后,中间的数值;对于偶数个元素,中值是指排序后中间两个元素灰度值的平均值。 一般选用3*3或5*5窗口,形状可分为方形或十字形,如下图所示。 (a) 方形 (b) 十字形 图2-1 二维中值滤波窗口形状 二维中值滤波可表示为

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

中南大学 数字图像处理实验报告实验三数学形态学及其应用

实验三 数学形态学及其应用 一.实验目的 1.了解二值形态学的基本运算 2.掌握基本形态学运算的实现 3.了解形态操作的应用 二.实验基本原理 腐蚀和膨胀是数学形态学最基本的变换,数学形态学的应用几乎覆盖了图像处理的所有领域,给出利用数学形态学对二值图像处理的一些运算。 膨胀就是把连接成分的边界扩大一层的处理。而收缩则是把连接成分的边界点去掉从而缩小一层的处理。 二值形态学 I(x,y), T(i,j)为 0/1图像Θ 腐蚀:[]),(&),(),)((),(0,j i T j y i x I AND y x T I y x E m j i ++=Θ== 膨胀:[]),(&),(),)((),(0 ,j i T j y i x I OR y x T I y x D m j i ++=⊕== 灰度形态学T(i,j)可取10以外的值 腐蚀: []),(),(min ),)((),(1 ,0j i T j y i x I y x T I y x E m j i -++=Θ=-≤≤ 膨胀: []),(),(max ),)((),(1 ,0j i T j y i x I y x T I y x D m j i +++=⊕=-≤≤ 1.腐蚀Erosion: {}x B x B X x ?=Θ: 1B 删两边 2B 删右上 图5-1 剥去一层(皮) 2.膨胀Dilation: {}X B x B X x ↑⊕:= 1B 补两边 2B 补左下 图5-2 添上一层(漆) 3.开运算open :

B B X ⊕Θ=)(X B 4.闭close :∨ Θ⊕=B B X X B )( 5.HMT(Hit-Miss Transform:击中——击不中变换) 条件严格的模板匹配 ),(21T T T =模板由两部分组成。1T :物体,2T :背景。 {} C x x i X T X T X T X ??=?21, 图5-3 击不中变换示意图 性质: (1)φ=2T 时,1T X T X Θ=? (2))()()(21T X T X T X C Θ?Θ=? C T X T X )()(21Θ?Θ= )/()(21T X T X ΘΘ= 6.细化/粗化 (1)细化(Thin ) C T X X T X XoT )(/??=?= 去掉满足匹配条件的点。 图5-4 细化示意图 系统细化{}n B oB XoB T Xo ))(((21=, i B 是1-i B 旋转的结果(90?,180?,270?)共8种情况 适于细化的结构元素 1111000d d I = d d d L 10110 0= (2)粗化(Thick ) )(T X X T X ??=? 用(){}0,01=T (){}0,12=T 时,X X X T X =?=? X 21 1 1 2 3 T ? XoT X ? X X ?T X ΘT T ⊕

武汉科技大学 数字图像处理实验报告讲解

二○一四~二○一五学年第一学期电子信息工程系 实验报告书 班级:电子信息工程(DB)1102班姓名 学号: 课程名称:数字图像处理 二○一四年十一月一日

实验一图像直方图处理及灰度变换(2学时) 实验目的: 1. 掌握读、写、显示图像的基本方法。 2. 掌握图像直方图的概念、计算方法以及直方图归一化、均衡化方法。 3. 掌握图像灰度变换的基本方法,理解灰度变换对图像外观的改善效果。 实验内容: 1. 读入一幅图像,判断其是否为灰度图像,如果不是灰度图像,将其转化为灰度图像。 2. 完成灰度图像的直方图计算、直方图归一化、直方图均衡化等操作。 3. 完成灰度图像的灰度变换操作,如线性变换、伽马变换、阈值变换(二值化)等,分别使用不同参数观察灰度变换效果(对灰度直方图的影响)。 实验步骤: 1. 将图片转换为灰度图片,进行直方图均衡,并统计图像的直方图: I1=imread('pic.jpg'); %读取图像 I2=rgb2gray(I1); %将彩色图变成灰度图 subplot(3,2,1); imshow(I1); title('原图'); subplot(3,2,3); imshow(I2); title('灰度图'); subplot(3,2,4); imhist(I2); %统计直方图 title('统计直方图'); subplot(3,2,5); J=histeq(I2); %直方图均衡 imshow(J); title('直方图均衡'); subplot(3,2,6); imhist(J); title('统计直方图');

原 图 灰度图 01000 2000 3000统计直方图 100200直方图均衡 0统计直方图 100200 仿真分析: 将灰度图直方图均衡后,从图形上反映出细节更加丰富,图像动态范围增大,深色的地方颜色更深,浅色的地方颜色更前,对比更鲜明。从直方图上反应,暗部到亮部像素分布更加均匀。 2. 将图片进行阈值变换和灰度调整,并统计图像的直方图: I1=imread('rice.png'); I2=im2bw(I1,0.5); %选取阈值为0.5 I3=imadjust(I1,[0.3 0.9],[]); %设置灰度为0.3-0.9 subplot(3,2,1); imshow(I1); title('原图'); subplot(3,2,3); imshow(I2); title('阈值变换'); subplot(3,2,5); imshow(I3); title('灰度调整'); subplot(3,2,2); imhist(I1); title('统计直方图'); subplot(3,2,4);

图像处理实验报告

实验报告 实验课程名称:数字图像处理 班级:学号:姓名: 注:1、每个实验中各项成绩按照10分制评定,每个实验成绩为两项总和20分。 2、平均成绩取三个实验平均成绩。 2016年 4 月18日

实验一 图像的二维离散傅立叶变换 一、实验目的 掌握图像的二维离散傅立叶变换以及性质 二、实验要求 1) 建立输入图像,在64?64的黑色图像矩阵的中心建立16?16的白色矩形图像点阵, 形成图像文件。对输入图像进行二维傅立叶变换,将原始图像及变换图像(三维、中心化)都显示于屏幕上。 2) 调整输入图像中白色矩形的位置,再进行变换,将原始图像及变换图像(三维、中 心化)都显示于屏幕上,比较变换结果。 3) 调整输入图像中白色矩形的尺寸(40?40,4?4),再进行变换,将原始图像及变 换图像(三维、中心化)都显示于屏幕上,比较变换结果。 三、实验仪器设备及软件 HP D538、MATLAB 四、实验原理 傅里叶变换作为分析数字图像的有利工具,因其可分离性、平移性、周期性和共轭对称性可以定量地方分析数字化系统,并且变换后的图像使得时间域和频域间的联系能够方便直观地解决许多问题。实验通过MATLAB 实验该项技能。 设),(y x f 是在空间域上等间隔采样得到的M ×N 的二维离散信号,x 和y 是离散实变量,u 和v 为离散频率变量,则二维离散傅里叶变换对一般地定义为 ∑∑ -=-=+-= 101 )],( 2ex p[),(1 ),(M x N y N yu M xu j y x f MN v u F π,1,0=u …,M-1;y=0,1,…N-1 ∑∑-=-=+=101 )],( 2ex p[),(),(M x N y N uy M ux j v u F y x f π ,1,0=x …,M-1;y=0,1,…N-1 在图像处理中,有事为了讨论上的方便,取M=N ,这样二维离散傅里叶变换对就定义为 ,]) (2ex p[),(1 ),(101 ∑∑ -=-=+- = N x N y N yu xu j y x f N v u F π 1,0,=v u …,N-1 ,]) (2ex p[ ),(1 ),(101 ∑∑-=-=+= N u N v N vy ux j v u F N y x f π 1,0,=y x ,…,N-1 其中,]/)(2exp[N yv xu j +-π是正变换核,]/)(2exp[N vy ux j +π是反变换核。将二维离散傅里叶变换的频谱的平方定义为),(y x f 的功率谱,记为 ),(),(|),(|),(222v u I v u R v u F v u P +== 功率谱反映了二维离散信号的能量在空间频率域上的分布情况。 五、实验步骤、程序及结果: 1、实验步骤: (1)、编写程序建立输入图像; (2)、对上述图像进行二维傅立叶变换,观察其频谱 (3)、改变输入图像中白框的位置,在进行二维傅里叶变换,观察频谱;

数字图像处理实验报告

- 院系:计算机科学学院专业:计算机科学与技术年级: 2012级 课程名称:数字图像处理组号: 姓名(学号): 指导教师:高志荣 2015年 5月 25日

实验原理(算法流程)2.运行结果 1-1-1图查看2012213500.png图片的基本信息和显示图片过程 1-1-2图将2012213500.png图片保存为2012213500.bmp图片3.实验分析

实验原理(算法流程) 先用imread()函数将2012213500.png存入I数组中,可见1-1-1图右上角的Workspace中的I。然后用imfinfo()函数和ans函数读取该图像的大小、类型等信息,具体在1-1-1图的Command Window中可见。至于图片格式的转换,就是用rgb2gray()函数将保存在I数组中的数据转换成灰度格式保存在原来的数组I中。最后将变换所得到的数据保存于2012213500.bmp文件中。 实验(2): 1.代码实现 I=imread(2012213500.bmp');%读取灰度图片 subplot(221),imshow(I,[]),title('256*256,256') I=I(1:2:end,1:2:end);%图片采样 subplot(222),imshow(I,[]),title('128*128,256') I=I(1:2:end,1:2:end);%图片采样 subplot(223),imshow(I,[]),title('64*64,256') I=I(1:2:end,1:2:end);%图片采样 subplot(224),imshow(I,[]),title('32*32,256') 2.运行结果 1-2 图图片空间分辨率对图片的影响 3.实验分析 由1-2图可以看出,在保持灰度级数一定的条件下,随着图片空间分辨率的减半,即256*256,128*128,64*64,32*32的图像,图中的各个区域边缘处的棋盘模式越来越明显,并且全图的像素颗粒越来越粗。证明了空间分辨率是影响图片清晰度的因素之一。 实验(3): 1.代码实现 I=imread('2012213500.bmp');%读取灰度图片 subplot(221),imshow(I,256),title('256*256,256')%灰度级为256 subplot(222),imshow(I,50),title('256*256,50') %灰度级为50 subplot(223),imshow(I,10),title('256*256,10') %灰度级为10 subplot(224),imshow(I,5),title('256*256,5') %灰度级为5

实验五 图像复原

信息工程学院实验报告 课程名称:数字图像处理Array 实验项目名称:实验五图像复原实验时间: 班级:姓名:学号: 一、实验目的 1.了解图像退化/复原处理的模型; 2. 掌握图像复原的原理及实现方法; 3. 通过本实验掌握利用MATLAB编程实现图像的恢复。 4. 掌握matlab代码的调试方法,熟悉常见代码错误及改正方法。 二、实验步骤及结果分析 MATLAB图像处理工具箱包含四个图像复原函数,请参照教材第126页例6.8编程实现图像复原。 1.用点扩散(PSF)函数创建运动模糊图像,修改参数改变模糊程度。 a) 无噪声运动模糊图像 b) 有噪声运动模糊图像 程序代码: I=imread('cameraman.tif'); %读取图像 subplot(1,3,1); imshow(I,[]);%显示图像 title('原始图像'); PSF=fspecial('motion',25,11); %运动模糊函数,运动位移是25像素,角度是11 Blurred=imfilter(I,PSF,'conv','circular'); %对图像运动模糊处理 subplot(1,3,2); imshow(Blurred,[]);title('无噪声运动模糊图像'); %显示无噪声运动模糊图像 Noise=0.05*randn(size(I)); %正态分布的随机噪声 BlurredNoisy=imadd(Blurred,im2uint8(Noise));%对退化后的图像附加噪声 subplot(1,3,3); imshow(BlurredNoisy,[]);title('有噪声运动模糊图像'); %显示运动模糊且加噪声后图像 执行结果:

相关文档
最新文档