实验一
1、实验要求
1、熟悉MATLAB软件的开发环境、基本操作以及图像处理工具箱,为编写图像处理程序奠定基础。
2、掌握二进制(黑白)图像、灰度图像、彩图像读、写和显示的基本方法,分别选择以上几种类型的图像,观察其图像类型参数。
3、说明以下程序的显示结果为何是一幅几乎全黑的图像。
clear; close all;
myi=zeros(20,20);
myi(2:2:18,2:2:18)=1;
myi=uint8(myi);
figure, imshow(myi,'notruesize');
编写程序将图一中orangutan_1.tif图片拉伸一倍后形成orangutan_2.tif所示的图片。
4、应用MATLAB(或C)语言编写一幅灰度图像直方图统计程序,并选择一幅图像显示其直方图,将结果与MATLAB图像处理工具箱中提供的灰度直方图函数imhist的处理结果进行比较。
5、利用以上编写的程序,估算图一所示图像iris.tif中的瞳孔半径(以像素为单位)。
orangutan_1.tif orangutan_2.tif iris.tif
图一
2、实验内容
1,通过安装matlab软件,熟悉MATLAB软件的开发环境、基本操作以及图像处理工具箱
2,图像的读、写、显示和图像类型参数查看
通过 I= imread(FILENAME),读取图像,注意FILENAME=‘图像文件所在的位置+文件名’;
1)通过imwrite(a,FILENAME,fmt),可以把a图像写进FILENAME图像,即是替换掉FILENAME,但是文件图像格式不替换。
2)通过imshow(I),可以把I图像显示出来。
3)例如:在matlab软件中,运行如下命令:
I = imread('E:\orangutan_2.tif');
figure,imshow(I)
I1 = imread('E:\iris.tif');
figure,imshow(I1)
imwrite(I,'E:\iris.tif','tif')
I2 = imread('E:\iris.tif');
figure,imshow(I2)
原图:
orangutan_2.tif iris.tif
运行结果:
可以看到orangutan_2.tif已成功写入 iris.tif中。
4)在matlab的可以查看各图像类型的参数
先在workspace中导入一幅名为xx.jpg的真彩图,然后在命令窗口输入如下命令:
I8= imread('E:\iris.tif');
I64=double (I8)/255;
imshow(I64);
将一幅名为iris.tif的灰度图像转换成二值图像,然后观察workspace中显示的二值图像、灰度图像、和真彩图像的参数如下图所示
3,全黑图像的解释和拉伸图像程序
1)、解释
由程序myi=uint8(myi);可知此程序编写的图像在计算机中采用的是8位存储,即灰度值为0~255,其中0为黑,255为白,中间值为由黑向白过度的值。而程序myi=zeros(20,20);构造了一个20行20列的0值矩阵,程序myi(2:2:18,2:2:18)=1;将1赋值给矩阵的2,4,6,8,10,12,14,16,18行和2,4,6,8,10,12,14,16,18列,即这些位置的值为1。因为0,1matlab直方图都在人眼识别的黑范围内,固图像是全黑的,如果将myi(2:2:18,2:2:18)=1;改为myi(2:2:18,2:2:18)=255;就会发现图像是黑白相间的条格。
2)、纵向二倍拉伸图像代码
T1 = maketform('affine',[1 0 0; 0 2 0; 0 0 1]);
I = imread('E:\orangutan_1.tif');
I1 = imtransform(I,T1);
imshow(I),figure,imshow(I1)
4,灰度图像直方图统计程序
1)编写的程序
img=imread('E:\iris.tif');
imshow(img);
[M,N]=size(img);
img=double(img);
h=zeros(256,256);
for i=1:M,
for j=1:N,
f=img(i,j);
h(f+1)=h(f+1)+1;
end
end
figure;bar(h);grid;
2)直接调用MATLAB图像处理工具箱中提供的灰度直方图函数imhist
I = imread('E:\iris.tif');
imhist(I)
3)显示分别如下图1和图2
图1
图2
5,估算图像iris.tif中的瞳孔半径(以像素为单位)
方法:从图1中带网格线的图中估算像素
具体方法:
100~200之间的单位个数为8,则瞳孔面积大概为80000像素,利用求半径公式S=3.14R^2得到半径R=√ ̄(S/3.14)=√ ̄(80000/3.14)≈160像素
实验二
应用MATLAB工具箱自带的图像函数或自己编程进行图像处理,包括显示图像、格式转换、图像傅立叶变换、图像灰度调整、对比度增强、直方图均衡、邻域平均法、中值滤波法、图像代数运算、边缘增强、伪彩增强、假彩合成、二值化、边缘检测等;分析处理结果,掌握方法和原理,巩固所学内容。
部分示例以及需要完成的具体实验题目:
1)二维傅立叶变换示例:选择一幅图像,对其进行离散傅立叶变换并显示离散傅立叶谱。
% 根据以下生成的图像矩阵数据进行图像的傅立叶变换并显示其频谱
clear;close all;
f=zeros(30,30);
f(5:24,13:17)=1;
figure,imshow(f,'notruesize');
F=fft2(f);
% 可视化二维傅立叶变换结果的常用方法是使用对数,以便更详细地观察在0附近区域的细节
figure,imshow(log(abs(F)),[-1 5],'notruesize');colorbar;colormap(jet);
pause
% 以上可视化f的DFT振幅谱存在以下两个问题:
% 一、傅立叶变换采样比较粗糙
% 原因:快速傅立叶变换算法只能处理大小为2的幂次的矩阵,而本例中矩阵维数不是2
的幂次
% 解决办法:在计算DFT时可以通过对f进行零填充来获得较好的傅立叶变换采样
% 二、零频率系数显示在图形的左上角而不是传统的中心位置
% 原因:计算机系统在执行傅立叶变换算法时是以图像的左上角为坐标原点的
% 解决办法:用函数fftshift通过将图像FF的四个象限进行交换,使零频率系数位于图形的中心
FF=fft2(f,256,256); % 对f进行零填充,得到一个256X256矩阵,然后再计算离散傅立叶变换
figure,imshow(log(abs(FF)),[-1 5],'notruesize');colorbar;colormap(jet);
pause
FFF=fftshift(FF); % 使用函数fftshift对第二个问题进行修正解决
figure,imshow(log(abs(FFF)),[-1 5],'notruesize');colorbar;colormap(jet);
return
代码:% 根据以下生成的图像矩阵数据进行图像的傅立叶变换并显示其频谱
clear;close all;
f=zeros(30,30);
f(5:24,13:17)=1;
figure,imshow(f,'notruesize');
F=fft2(f);
% 可视化二维傅立叶变换结果的常用方法是使用对数,以便更详细地观察在0附近区域的细节
figure,imshow(log(abs(F)),[-1 5],'notruesize');colorbar;colormap(jet);
pause
FF=fft2(f,256,256); % 对f进行零填充,得到一个256X256矩阵,然后再计算离散傅立叶变换
figure,imshow(log(abs(FF)),[-1 5],'notruesize');colorbar;colormap(jet);
pause
FFF=fftshift(FF); % 使用函数fftshift对第二个问题进行修正解决
figure,imshow(log(abs(FFF)),[-1 5],'notruesize');colorbar;colormap(jet);
return
2)直方图均衡化:
利用Matlab提供的可进行图像直方图修正的函数,自己选择几幅直方图不均匀的图像(如图二pout.tif),对这些图像进行直方图均衡处理,显示处理前后的图像以及它们的灰度直方图,体会直方图均衡化算法的特点。
代码:I=imread('pout.tif');
H=histeq(I); %对源图像的直方图进行均衡化
subplot(2,2,1),imshow(I); %显示源图像
title('源图像');
subplot(2,2,2),imshow(H); %显示均衡化后的图像
title('均衡化后的图像');
subplot(2,2,3),imhist(I); %显示原始图像的灰度直方图
title('源图像的直方图');
subplot(2,2,4),imhist(H); %显示均衡化后图像的直方图
title('均衡化后的图像直方图');
3)灰度修正技术:
按照教材64页上的公式(4.1.6)
(4.1.6)
以及以下公式(1),分别编程实现图像的分段线性灰度变换和非线性灰度变换。
(1)
利用以上自己编写的代码对图三所示的实验图像(bottle.tif)进行灰度变换,使拍摄主体瓶子的花纹更加清晰地表现出来,改善视觉效果,显示增强前、后的图像以及它们的灰度直方图,并考虑利用Matlab提供的imadjust函数是否能完成同样的工作。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论