文档视界 最新最全的文档下载
当前位置:文档视界 › 图像处理实验报告

图像处理实验报告

图像处理实验报告
图像处理实验报告

实验一:图像文件读取和格式转换(BMP、JPG),FMRI_MRI并利用Matlab编程,实现多种格式图像的读取,显示和格式转换

一、实验目的

学习并掌握MATLAB中有关图像读取、显示、格式转换等基本内容。

二、实验内容

选取目标图片,利用MATLAB对其进行读取、显示、格式转换。

三、实验步骤及各自结果

1图像的读取和显示

图像来自于E:\实验,图像名称为“mri.bmp”,为bmp格式。

(1)创建脚本文件,并命名为“tx1”。

(2)图像的读取和显示

用imread函数实现图像的读取,imshow函数实现图像的显示。

所读取得灰度图像如下:

(3)格式转换

将灰色图像转换成索引图像

索引图像如下:

灰度图像转二值图像

二值图像如下

实验二:图像的直方图调整和灰度变换

一、实验目的

了解并掌握MATLAB中图像直方图调整和灰度变换。

二、实验内容

选取目标图片,利用MATLAB对其进行直方图调整和灰度变换。

三、实验步骤及其各自的结果

1创建脚本文件并命名为“tx2”。

2图像灰度调整

利用imadjust函数直接调整灰度的范围而调整灰度,本例中直接利用MATLAB R2012a工具箱中自带的图片‘pout.tif’,‘cameraman.tif’和课堂提供的图片‘fmri.bmp’。

(1)下面命令通过灰度范围调整实现了灰度调整

实验结果如下图所示

其中左上图为原始图像,左下图为相应的灰度数据柱状统计图,右上图为调整后的图像,右下图为相应的灰度数据统计图。从图中可以看到,调整之后,图像的灰度得到了极大的改善。

如下图

(3)可以通过调整灰度范围内的灰度子范围数据,来实现增强或减少图像对比度

的效果。

此例中将灰度范围为[0,51]的值,调整到灰度范围为[128,255]的值,并将灰度范围为[128,255]的值映射为255;相应的命令如下所示

如下图所示

(4)图像反转

反转后结果

2使用直方图调整灰度

读取一幅灰度图像,用histeq函数将原始图像的灰度直方图均衡化,同时观察均衡化后的图像与前面图像的差别,均衡化后的灰度直方图与前面的灰度直方图的区别。

实验结果如下图所示

实验三:图像的变换和频域滤波

一、实验目的

掌握图像快速傅里叶变换原理、频域低通滤波器的设计。进一步加深理解和掌握图像频谱的特点和频域低通滤波的原理。

二、实验内容

设计程序,实现图像的快速傅里叶变换和截止频率半径分别为5、10、20、40理想低通滤波器对图像的滤波处理。观察处理前后图像效果,分析实验结果和算法特点。

三、实验原理

二维理想低通滤波器的传递函数为:

00

1.(,)(,)0.(,)D u v D H u v D u v D ≤?=?>?D0是指定非负数值,D (u ,v )是(u ,v )点距频率中心的距离。如果要研究的图像尺寸为M X N ,则它的变换也有相同的尺寸。在半径为D0的圆内,所有频率无衰减地通过滤波器,而在此半径之外的所有频率完全被衰减掉。

四、实验步骤

1图像的快速傅立叶变换。

在Edit 编辑器内输入如下程序(程序见附1)

先产生的是一维FFT 结果,后产生的是二维FFT

的结果。

2频域实现低通滤波。

图1截止频率半径为5的低通滤波

图2截止频率半径为10的低通滤波

图3截止频率半径为20的低通滤波

图4截止频率半径为40的低通滤波

附1:程序源代码

I=imread('pout.tif');

figure(1),subplot(1,3,1),imshow(I);

I1=I;

I2=I;

i=sqrt(-1);

m=nextpow2(291);

n=240;

N=2^m;

for p=1:1:n

if291

x=[I(p*291-290:p*291),zeros(1,N-291)];

x=im2double(x);

end

nxd=bin2dec(fliplr(dec2bin([1:N]-1,m)))+1; y=x(nxd);

for mm=1:m

Nmr=2^mm;

u=1;

WN=exp(-i*2*pi/Nmr);

for j=1:Nmr/2

for k=j:Nmr:N

kp=k+Nmr/2;

q=(y(kp))*u;

y(kp)=y(k)-q;

y(k)=y(k)+q;

end

u=u*WN;

end

end

Y1=fftshift(y);

Y2=abs(Y1);

Y3=im2uint8(Y2);

I1(p*291-290:p*291)=Y3(1:291);

end

subplot(1,3,2),imshow(I1);

m=nextpow2(240);

n=291;

N=2^m;

for p=1:1:n

for t=1:1:240

T(t)=I1(t*291-290+p-1);

end

if240

x=[T(1:240),zeros(1,N-240)];

else

x=T;

end

x=im2double(x);

nxd=bin2dec(fliplr(dec2bin([1:N]-1,m)))+1;

y=x(nxd);

for mm=1:m

Nmr=2^mm;

u=1;

WN=exp(-i*2*pi/Nmr);

for j=1:Nmr/2

for k=j:Nmr:N

kp=k+Nmr/2;

q=(y(kp))*u;

y(kp)=y(k)-q;

y(k)=y(k)+q;

end

u=u*WN;

end

end

Y1=fftshift(y);

Y2=abs(Y1);

Y3=im2uint8(Y2);

for t=1:1:240

I2(t*291-290+p-1)=Y3(t);

end

end

subplot(1,3,3),imshow(I2);

附2:程序源代码

(1)理想低通滤波器(以D0=5为例)

I1=imread('pout.tif');

imshow(I1);

title(I1);%将灰度图像的二维不连续Fourier变换的零频率成分移到频谱的中心s=fftshift(fft2(I1));

[M,N]=size(s);%分别返回s的行数到M中,列数到N中

n1=floor(M/2);%对M/2进行取整

n2=floor(N/2);%对N/2进行取整

%ILPF滤波,d0=5,10,20,40(程序中以d0=5为例)

d0=5;%初始化d0

for i=1:M

for j=1:N

d=sqrt((i-n1)^2+(j-n2)^2);%点(i,j)到傅立叶变换中心的距离

if d<=d0%点(i,j)在通带内的情况

h=1;%通带变换函数

else%点(i,j)在阻带内的情况

h=0;%阻带变换函数

end

s(i,j)=h*s(i,j);%ILPF滤波后的频域表示

end

end

s=ifftshift(s);%对s进行反FFT移动

s=uint8(real(ifft2(s)));%对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数

figure;%创建图形图像对象

subplot(122);imshow(s)

subplot(121);imshow(I1)

实验结果分析:(1)对于理想的低通滤波器,当截止频率D0较低的时候,图像严重模糊,被滤去的高频部分的能量包含了图像的主要的边缘信息,同时振铃效应也非常的明显。随着截止频率的增加,模糊地程度减少,这是因为保留的边缘信息增加了。

实验四:磁共振大脑断层图像的边界提取(MRI)

一、实验目的

了解有关数字图像边界提取的基本概念,熟悉Matlab软件中关于数字图像边界提取的基本命令,掌握利用Matlab软件进行数字图像边界提取的方法。二、相关知识

在图像处理中,有一种十分实用的操作叫做边界提取,在提取了图像的边界后,就可以对图像进行进一步的操作如图像分割,特定区域的提取,骨架提取等等。

常用的边界检测算子有微分算子、拉普拉斯高斯算子和canny算子。

在MATLAB中,系统提供edge函数,其功能是利用各种边界检测算子来检测灰度图像的边界。

函数edge的用法有以下几种:

1.BW=edge(I);

2.BW=edge(I,method);

3.BW=edge(I,method,thresh);

4.BW=edge(I,method,thresh,direction)

其中:

I:输入图像;

method:提取边界的方法,共有六种可取的值,即共有六种可使用的方法,包括:’sobel’,’prewitt’,’roberts’,’log’,’zerocross’,’canny’,缺省时使用’sobel’;

thresh:指定的阈值,所有不强于thresh的边都被忽略;

direction:对于’sobel’和’prewitt’方法指定方向,可取值为:’horizontal’

和’vertical’,’both’(缺省值)

BW:返回的二值图像,其中1代表找到的边界。

在这些方法中,canny是较为优秀的一种,该方法使用两种不同的阈值分别检测强边界和弱边界,并且仅当弱边界和强边界相连时,才将弱边界包含在输出图像中。因此,这种方法不容易被噪声干扰,更容易检测到真正的弱边界。三、实验步骤

分别调用’sobel’,’prewitt’,’roberts’,’log’,’zerocross’和’canny’六种方法检测图像的边界。程序如下:

(1)I=imread('E:\实验\fmri.bmp');

BW1=edge(I,'sobel');

figure;

imshow(BW1);

(2)I=imread('E:\实验\fmri.bmp');

BW2=edge(I,'prewitt');

figure;

imshow(BW2);

(3)I=imread('E:\实验\fmri.bmp');

BW3=edge(I,'roberts');

figure;

imshow(BW3);

(4)I=imread('E:\实验\fmri.bmp');

BW4=edge(I,'log');

figure;

imshow(BW4);

(5)I=imread('E:\实验\fmri.bmp');

BW5=edge(I,'zerocross');

figure;

imshow(BW5);

(6)I=imread('E:\实验\fmri.bmp');

BW6=edge(I,'canny');

figure;

imshow(BW6);

四、实验结果:

图1原始图像

图2sobel算子提取的边界

图3prewitt算子提取的边界

图4roberts算子提取的边界

图5zerocross算子提取的边界

图6log算子提取的边界

图7canny算子提取的边界

五、实验结果

从上面结果我们可以看出,canny算子提取的边界较为完整。

相关文档
相关文档 最新文档