图像处理简单操作函数的应用

一、 实验目的

1.了解 MATLAB图像处理工具箱函数中的基本功能及操作方法。

2.掌握MATLAB中图像读写和显示函数的使用方法。

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

4.熟悉常用的图像类型的相互转换。

 

二、实验内容和步骤

1.利用imread()函数分别读入图像trees.tifngc6543a.jpg,存入两个数组中,用“whos”命令获取图像的基本信息。

实验代码:

I1=imread('E:\实验一\trees.tif');

I2=imread('E:\实验一\ngc6543a.jpg');

whos I1;

whos I2;

实验结果:

 

 

 

 

2.利用imwrite()函数将图像trees.tif压缩,将其保存为一幅压缩了像素的jpg文件, 图像名为为trees1.jpg

实验代码:

imwrite(I1,'E:\实验一\trees1.jpg');

实验结果:

 

 

 

 

 

 

3.命令窗口利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息。

实验代码:

ans=imfinfo ('E:\实验一\trees1.jpg')

实验结果:

 

 

 

 

4.4个不同的图像窗口中显示任意4幅不同图像类型(二值、索引、灰度、真彩色)的图像。

实验代码:

figure(1);

RGB=imread('E:\实验一\onion.png');%彩度

imshow(RGB);

figure(2);

[X,map]=rgb2ind(imread('E:\实验一\onion.png'),8);%索引最大65535

imshow(X,map);

figure(3);

I2=rgb2gray(imread('E:\实验一\onion.png'));%灰度

imshow(I2);

figure(4);

BW=im2bw(imread('E:\实验一\onion.png'));%二值

imshow(BW);

实验结果:

 

 

5.分别用imreadload命令读入两幅不同的图像,并排显示在同一图像窗口。

实验代码:

I=imread('E:\实验一\blobs.png');

subplot(1,2,1);

imshow(I);

load trees.mat;

subplot(1,2,2);

imshow(X,map);

实验结果:

 

 

6.利用imshow()函数来显示图像trees.tif,要求先转化为rgb图像,分别显示每个通道,然后合并再显示)

实验代码:

[I,map]=imread('E:\实验一\trees.tif');

I=ind2rgb(I,map);

 

RGB1=I;

RGB2=I;

RGB3=I;

RGB1(:,:,1);

RGB1(:,:,2)=0;

RGB1(:,:,3)=0;

 

RGB2(:,:,1)=0;

RGB2(:,:,2);

RGB2(:,:,3)=0;

 

RGB3(:,:,1)=0;

RGB3(:,:,2)=0;

RGB3(:,:,3);

subplot(2,2,1);

 

imshow(RGB1);

subplot(2,2,2);

imshow(RGB2);

subplot(2,2,3);

imshow(RGB3);

subplot(2,2,4);

I1=RGB1+RGB2+RGB3;

imshow(I1);

实验结果:

 

 

7.rgb2gray()一幅索引图像trees.tif转化为灰度图像,并且用imshow显示出来观察图像的特征。

实验代码:

I=imread('E:\实验一\trees.tif');

I=ind2gray(I,map);%索引转灰度

imshow(I);

实验结果:

 

 

8.im2bw()将一幅灰度图像camema.jpg转化为二值图像,并且用imshow显示出来观察图像的特征。

实验代码:

I=imread('E:\实验一\cameraman.jpg');

I=im2bw(I);

imshow(I);

实验结果:

 

 

9.rgb2ind()彩色图像onion.png转化为索引图像,用imshow显示出来,并读取出两种图像的数据,观察图像的特征。

实验代码:

I=imread('E:\实验一\onion.png');

subplot(1,2,1);

imshow(I);

[X,map]=rgb2ind(I,64);

subplot(1,2,2);

imshow(X,map);

实验结果:

 

 

10.读入并在同一窗口显示27帧索引图像阵列“mri.mat”,并在单独窗口显示第61020帧图像。

实验代码:

mri=uint8(zeros(128,128,1,27));

  for frame=1:27

      [mri(:,:,:,frame),map]=imread('mri.tif',frame);

  end

figure;

hold on;

  for frame=1:27

        hold on;

        subplot(5,6,frame);

        imshow(mri(:,:,:,frame),map);

           

  end

figure;imshow(mri(:,:,:,6),map);

figure;imshow(mri(:,:,:,10),map);

figure;imshow(mri(:,:,:,20),map);

实验结果:

 

 

 

11.制作并显示一个动态图。

实验代码:

 

    t = 0:0.1:2*pi;

    x = 16*(sin(t)).^3;

    y = 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t);

    axis off;

    M = moviein(20);

    set(gcf,'color',[1 1 1]);

    [A,map] = rgb2ind(frame2im(getframe),256);

    imwrite(A,map,'E:\实验一\test2.gif','LoopCount',65535,'DelayTime',0.1);

    h = animatedline('Color','r','LineWidth',3);

    for k = 1:length(x)

    addpoints(h,x(k),y(k));

    axis([-20,20,-20,20])

    [A,map] = rgb2ind(frame2im(getframe),256);

    imwrite(A,map,'E:\实验一\test2.gif','WriteMode','append','DelayTime',0.1);

end;

实验结果:

 

 

 

 

三、 问题与讨论

1.简述 MATLAB 软件的特点。

答: (1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;

(2) 具有完备的图形处理功能,实现计算结果和编程的可视化;

(3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;

(4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

2.MATLAB软件可以支持哪些图像文件格式?

答:JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式。

BMP(Windows Bitmap):有1位、4位、8位、24位非压缩图像,8RLE(Run length Encoded)的图像。文件内容包括文件头(一个BITMAP FILEHEADER数据结构)、位图信息数据块(位图信息头BITMAP INFOHEADER和一个颜色表)和图像数据。

PCX(Windows Paintbrush):可处理1位、4位、8位、16位、24位等图像数据。文件内容包括文件头、图像数据和扩展色图数据。

TIFF(Tagged Iamge File Format):处理1位、4位、8位、24位非压缩图像,1位、4位、8位、24packbit压缩图像,1CCITT压缩图像等。文件内容包括文件头、参数指针表与参数域、参数数据表和图像数据四部分。

PNG(Portable Network Graphics):包括1位、2位、4位、8位和16位灰度图像,8位和16位索引图像,24位和48位真彩色图像。

GIF(Graphics Interchange Format):任何1位到8位的可交换的图像。

HDF(Hierarchial Data Format):有8位、24位光栅图像数据集。

ICO(Windows Icon resource):有1位、4位、8位非压缩图像。

CUR(Windows Cursor resource):有1位、4位、8位非压缩图像。

XWD(X Windows Dump):包括1位、8ZpixmapsXYBitmapsXYPixmmmaps

RAS(Sun Raster image):有1bitmap8位索引、24位真彩色和带有透明度的32位真彩色。

PBM(Portable Bitmap)

PGM(Portable Graymap)

PPM(Portable Pixmap)

3.说明函数imread() 的用途格式以及各种格式所得到图像的性质。

答:imread的常见调用格式为:

A = imread(filename,fmt)

其作用是将文件名用字符串filename表示的,扩展名用fmt表示的图像文件中的数据读到矩阵A中。如果filename所指的为灰度级图像,则A为一个二维矩阵;如果filename所指的为RGB图像,则A为一个m×n×3的三维矩阵。Filename表示的文件名必须在MATLAB的搜索路径范围内,否则需指出其完整路径。

imread的其他几种重要的调用格式为:

[X,map] = imread(filename.fmt)

[] = imread(filename)

[] = imread(URL,)

[] = imread(,idx) (CUR,ICO and TIFF only)

[] = imread(,frames,idx) (GIF only)

[] = imread(,ref) (HDF only)

[] = imread(,BackgroundColor,BG) (PNG only)

[A,map,alpha] = imread() (ICO,CUR and PNG only)

上面一些参数的含义如下:idx是指读取图标(curicotiff)文件中第idx个图像,默认值为1。’frame,idx是指读取gif文件中的图像帧,idx值可以是数量、向量或’all’。ref是指整数值。alpha是指透明度。

4.为什么用I = imread(‘lena.bmp’) 命令得到的图像I 不可以进行算术运算?

答:MATLAB系统默认的算术运算是针对双精度类型(double)的数据,而上述命令产生的矩阵的数据类型是无符号8(MATLAB为图像提供的特殊的数据类型),直接进行运算会溢出。

  1. 如何显示 RGB 图像的某一个颜色分量?

答:读取图像I

I(:,:,1)=a;

I(:,:,2)=b;

I(:,:,3)=c;

红色bc0,绿色ac0,蓝色ab0

6.如何显示多帧图像的所有帧?如何根据多帧图像创建电影片段?

答:  imshow(mri(:,:,:,frame),map);单位时间内显示图像大于24帧。  

四、总结

1.实验收获(即通过实验学会了什么)

首先通过实验,我了解到了MATLAB图像处理工具箱函数中的基本功能及操作方法,学会了基础的图像读写和显示函数的使用方法,掌握了常用的图像类型的相互转换。对于MATLAB这个工具有了最基础最根本的了解,为后续的软件的使用打下了基础。

2.实验不足(即通过实验发现哪些方面还没有掌握)

首先是那些图像类型转换不是很熟练,经常使用出错,对那些常用的函数记不住,其次便是显示连续帧和动图制作方面有点不太明白,是自己较为薄弱的地方,还需要在多练习练习。

 

posted @ 2022-12-06 20:20  安良  阅读(985)  评论(0编辑  收藏  举报