当前位置:文档之家› 图像处理常用命令matlab

图像处理常用命令matlab

图像处理常用命令matlab
图像处理常用命令matlab

1. 读入并显示一幅图像

clear %清除所有的工作平台变量

close all %关闭已打开的图形窗口

I=imread ('pout.tif'); %读取图像pout.tif(该图像是图像处理工具箱自带的图像),

%存储在一个名为I的数组中

imshow(I) %显示图像I

2. 检查内存中的图像

whos %查看图像数据I是如何存储在内存中的。

3. 实现直方图均衡化

figure %生成一个新的图形窗口,避免后面的图像覆盖前面图像的显示

imhist(I) %创建描述图像I灰度分布的直方图

I2=histeq(I); %将图像的灰度值扩展到整个灰度范围,从而提高图像数组I的对比度。figure,imshow(I2) %显示修改过的图像I2

figure,imhist(I2) %显示拓展后的灰度值的分布情况

4. 保存图像

imwrite(I2,'pout.png'); %将图像I2以PNG图像文件格式保存到磁盘

5. 检查新生成文件的内容

imfinfo('pout2.png') %观察保存的图像文件信息

图像处理的高级应用

主要对一幅灰度图像rice.tif进行一些较为高级的操作为例说明整个过程。

1. 读取和显示图像

clear %清除所有的工作平台变量

close all %关闭已打开的图形窗口

I=imread('rice.png'); %读取图像rice.png (该图像是图像处理工具箱自带的图像)

imshow(I) %显示图像

2. 估计图像背景

background=imopen(I,strel('disk',15)); %对图像I进行形态学开操作,删除那些不完全包括

%在半径为15的圆盘中的对象,实现对背景亮度的估计figure,imshow(background)

figure,surf(double(background(1:8:end,1:8:end))),zlim([0 255]); %以表面形式显示背景

3. 从原始图像中减去背景图像

I2=imsubtract(I,background); %将背景图像background从原始图像I中减去

figure,imshow(I2)

4. 调节图像对比度

I3=imadjust(I2,stretchlim(I2),[0 1]); %调节图像的对比度

figure,imshow(I3);

5. 使用阈值操作将图像转换为二进制图像

level=graythresh(I3);

bw=im2bw(I3,level);

figure,imshow(bw)

6. 检查图像中的对象个数

[labeled,numObjects]=bwlabel(bw,4); %确定图像中的米粒个数

numObjects

101

7. 检查标记矩阵

grain=imcrop(labeled) %选择并显示已标记的对象和部分背景内的像素

RGB_label=label2rgb(labeled,@spring,'C','shuffle');

%将标记矩阵显示为一副伪彩色的索引图像,在伪彩色的彩色图像中,

%标记矩阵中的每一个对象都将被映射为相关调色板中的不同颜色imshow(RGB_label);

8.计算图像中对象的统计属性

graindata=regionprops(labeled,'basic')

%测量图像或者区域的属性,并返回一个结构数组。当用于一个标记图像时,%

它还为每一个标记分量创建一个结构元素。

graindata(51).Area %显示第51个元素的属性

graindata(51).BoundingBox,graindata(51).Centroid %寻找最近的边缘和中心

allgrains=[graindata.Area]; %创建一个新的向量allgrains,其包含每个米粒的范围allgrains(51) %查看第51个元素的范围

max(allgrains) %获取最大的米粒大小

biggrain=find(allgrains==404) %返回最大米粒的标记号

mean(allgrains) %获取米粒的平均大小

hist(allgrains,20) %绘制包含20个柱的直方图

图像格式:是存储图像采用的文件格式。不同的操作系统、不同的图像处理软件,所支持的图像格式都有可能不同。

在实际应用中经常会遇到的图像格式有:BMP、GIF、TIFF、PCX、JPEG、PSD、PCD、

WMF等。

*(1) BMP(Bitmap)文件

*(2)GIF文件

*(3)TIF文件

*(4)JPEG文件

图像类型:是指数组数值与像素颜色之间定义的关系,它与图像格式概念有所不同。

在MATLAB图像处理工具箱中,有五种类型的图像:

(1) 二进制图像

在一幅二进制图像中,每一个像素将取两个离散数值(0或1)中的一个,从本质上说,这两个数值分别代表状态“开”(on)或“关”(off)。

二进制图像仅使用unit8或双精度类型的数组来存储。

在图像处理工具箱中,任何返回一幅二进制图像的数组均使用unit8逻辑数组存储该图像,并且使用一个逻辑标志来指示unit8逻辑数组的数据范围。

若逻辑状态为“开”(on),数组范围为[0,1];若为“关”(off),则数组范围为[0,255]。

(2) 索引图像

索引图像:是一种把像素值直接作为RGB调色板下标的图像。

在MATLAB中,索引图像包含有一个数据矩阵X和一个颜色映射(调色板)矩阵map。数据矩阵:可以是unit8、unit16、双精度类型的;

颜色映射矩阵map:是一个m×3的数据矩阵,其中每个元素的值均为[0,1]之间的双精度浮点型数据,map矩阵的每一行分别表示红色、绿色和蓝色的颜色值。

索引图像可把像素值直接映射为调色板数值,每一个像素的颜色通过使用X的数值作为map的下标来获得,如值1指向矩阵map中的第一行,值2指向第二行,依此类推。

颜色映射通常与索引图像存储在一起,当装载图像时,MATLAB自动将颜色映射表与图像同时装载。

图像矩阵与颜色映射表之间的关系依赖于图像数据矩阵的类型。

如果图像数据矩阵是双精度类型,则数据1指向矩阵map中的第一行,数据值2将指向map中的第二行,依此类推;

如果图像矩阵是unit8或unit16类型时,将产生一个偏移,即数值0表示矩阵map中的第一行,数据值1将指向map中的第二行,依此类推。

(3) 灰度图像

灰度图像通常由一个unit8、unit16、双精度类型的数组来描述,其实质是一个数据矩阵I,该矩阵中的数据均代表了在一定范围内的灰度级,每一个元素对应于图像的一个像素点,通常0代表黑色,1、255、65 535(针对不同存储类型)代表白色。

(4) 多帧图像

多帧图像是一种包含多幅图像或帧的图像文件,又称为多页图像或图像序列。

在MATLAB中,它是一个四维数组,其中第四维用来指定帧的序号。

在一个多帧图像数组中,每一幅图像必须有相同的大小和颜色分量,每一幅图像还要使用相同的调色板。另外,图像处理工具箱中的许多函数(如:imshow)只能对多幅图像矩阵的前两维或三维进行操作,也可以对四维数组使用这些函数,但是必须单独处理每一帧。如果将一个数组传递给一个函数,并且数组的维数超过该函数设计的超作维数,那么得到的结果是不可预知的。

(5) RGB图像

RGB图像又称为真彩色图像,它是利用R、G、B三个分量表示一个像素的颜色,R、G、B分别代表红、绿、篮3种不同的颜色,通过三基色可以合成出任意颜色。所以对一个尺寸为n×m的彩色图像来说,在MATLAB中则存储为一个n×m×3的多维数据数组,其中数

为24位的图像,红、绿、篮分量分别占用8位。

MATLAB的RGB数组可以是双精度的浮点型、8位或16位无符号的整数类型。在一个双精度类型的RGB数组中,每一个颜色分量都是一个[0,1]范围内的数值。如:颜色分量为(0,0,0)的像素将显示为黑色;颜色分量为(1,1,1)的像素将显示为白色。每一个像素的三个颜色分量都存储在数组的第三维中。如:像素(10,5)的红、绿、篮颜色值分别保存在元素RGB(10,5,1)、RGB(10,5,2)、RGB(10,5,3)中。

例:创建一个简单的RGB图像,该图像包含某一范围内不中断的红、绿、篮颜色分量,另外,针对每一个颜色分量各创建一幅图像来加以对比:

RGB=reshape(ones(64,1)*reshape(jet(64),1,192),[64,64,3]);

R=RGB(:,:,1);

G=RGB(:,:,2);

B=RGB(:,:,3);

subplot(2,2,1);imshow(R);

subplot(2,2,2);imshow(G);

subplot(2,2,3);imshow(B);

subplot(2,2,4);imshow(RG B);

(1)图像颜色浓淡处理(图像抖动)

X=dither(RGB,map) %通过抖动算法将真彩色图像RGB按指定的颜色(调色板)map转换

成索引色图像X

X=dither(RGB,map,Qm,Qe)

%利用给定的参数Qm,Qe从真彩色图像RGB中产生索引色图像X。

%Qm表示沿每个颜色轴反转颜色图的量化(即对于补色各颜色轴)的位数,

%Qe表示颜色空间计算误差的量化误差。

%如果Qe

注意:

输入图像可以是双精度类型或8位无符号类型,其他参数必须是双精度类型。

如果输出的图像是二值图像或颜色种类少于256的索引图像时,为uint8类型,否则为doule 型。

例:由RGB图像产生一个索引图像

使用索引图像chess.met的颜色图map,通过抖动map中的颜色,产生RGB图像autumn.tif的近似索引图像。

load chess;

RGB=imread('autumn.tif');

subplot(1,2,1);imshow(RGB);

Y=dither(RGB,map)

subplot(1,2,2);imshow(Y,map);

(2)灰度图像转换为索引图像

[X,map]=gray2ind(I,n)%按指定的灰度级数n和颜色图map,将灰度图像I转换成索引色

例:将灰度图像pout.tif转化成索引图像X,颜色图分别为gray(128)和gray(16)。

I=imread('pout.tif');

[I1,map1]=gray2ind(I,128);

[I2,map2]=gray2ind(I,16);

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

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

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

(3)索引图像转换为灰度图像

I=ind2gray(X,map)%将具有颜色图map的索引色图像X转换成灰度图像I,去掉了图像的%色度和饱和度,仅保留了图像的亮度信息。

%输入图像可以是double或unit8类型。

例:将一幅索引图像trees.mat转换成灰度图像。

load trees

I=ind2gray(X,map);

subplot(1,2,1);imshow(X,map);

subplot(1,2,2);imshow(I);

(4)RGB图像转换为灰度图像

I=rgb2gray(RGB)%将真彩色图像RGB转换成灰度图像I。

Newmap=rgb2gray(map)%将颜色图map转换成灰度级颜色图。

注意:如果输入的是真彩色图像,则图像可以是8位无符号类型或双精度类型,输出图像I 与输入图像类型相同。

如果输入的是颜色图,则输入和输出的图像均为双精度类型。

*例:将RGB图像flowers.tif转换为灰度图像。

RGB=imread('flowers.tif');

figure(1);imshow(RGB)

figure(2);Y=rgb2gray(RGB);imshow(Y)

(5)RGB图像转换为索引图像

[X,map]=rgb2ind(RGB)%直接将RGB图像转换为具有颜色图map的矩阵X.

[X,map]=rgb2ind(RGB,tol)%用均匀量化的方法将RGB图像转换为索引图像X.

[X,map]=rgb2ind(RGB,n)%使用最小方差量化的方法将RGB图像转换为索引图像,

%map中包括至少n个颜色。

X=rgb2ind(RGB,map)%通过将RGB中的颜色与颜色图map中最相近的颜色匹配,

%将RGB图像转换为具有map颜色图的索引图像。

[…]=rgb2ind(…,dither_option)

%通过dither_option参数来设置是否抖动。dither_option为dither表示使用抖动,以达到%较好的颜色效果;缺省时为nodither,使用了新颜色图中最接近的颜色来画原图的颜色。*例:将RGB图像flowers.tif转换为索引图像。

RGB=imread('flowers.tif');

figure(1);imshow(RGB)

figure(2);Y=rgb2ind(RGB,128);imshow(Y)

(6)索引图像转换为RGB图像

RGB=ind2rgb(X,map)%将矩阵X及相应颜色图map转化成真彩图像RGB。

输入图像X可以是双精度类型或8位无符号类型,输出图像RGB为双精度类型。例:将索引图像wmandril.mat转换为RGB图像。

load wmandril;

figure(1);imshow(X,map);

I=ind2rgb(X,map);

figure(2);imshow(I)

(7)通过阈值化方法将图像转换为二值图像

im2bw函数:通过设置亮度阈值将真彩图像、索引图像及灰度图像转化成二值图像。在转换过程中,如果输入图像不是灰度图像,首先将其转换为灰度级图像,然后通过阈值化将灰度级图像转换成二值图像。输出二值图像在输入图像所有亮度小于给定值(level取值范围为[0,1])像素点处均为0,其他均为1。其语法格式为:

BW=im2bw(I,level)%将灰度图像I转化为黑白二值图像。

BW=im2bw(X,map,level)%将带有颜色图map的索引图像X转化为黑白二值图像。

BW=im2bw(RGB,level)%将RGB图像转化为黑白二值图像。

注意:输入图像可以是双精度类型或8位无符号类型,输出图像为8位无符号类型。

例:通过阈值化方法将索引图像trees.mat转换为二值图像,阈值为0.4。

load trees;

BW=im2bw(X,map,0.4);

figure(1);imshow(X,map);

figure(2);imshow(BW)

(8)通过阈值化方法从灰度图像产生索引图像

X=grayslice(I,n)%将灰度图像I均匀量化为n个等级,然后转换为伪彩色图像X。

X=grayslice(I,v)%按指定的阈值向量v(每一个元素都在0和1之间)对图像I的值域进行划分,而后转换成索引图像X。

注意:输入图像I可以是双精度类型或8位无符号类型。

如果阈值数量小于256,则返回图像X的数据类型是8位无符号类型,X的值域为[0,n]或[0,length(v)];

否则,返回图像X为双精度类型,值域为[1,n+1]或[1,length(v)+1]。

*例:将一幅灰度图像转换成索引图像。

I=imread('alumgrns.tif');

figure(1);imshow(I);

X=grayslice(I,16);

figure(2);imshow(X,hot(16));

(9)将矩阵转换为灰度图像

I=mat2gray(X,[xmin,xmax])

%按指定的取值区间[xmin,xmax]将数据矩阵X转换为图像I,xmin对应灰度0(最暗即黑),%xmax对应灰度1(最亮即白)。如果不指定区间[min,max]时,MATLAB则自动将X 阵中%最小设为xmin,最大设为xmax。

似。Imshow函数也可用来使数据矩阵可视化。

*例:将图像滤波后产生的矩阵转换为灰度图像。

I=imread('saturn.tif');

J=filter2(fspecial('sobel'),I);

K=mat2gray(J);

figure(1);imshow(I);

figure(2);imshow(K);

3.3图像的显示

图像的显示过程:将图像从一组离散数据还原为一幅可见的图像的过程。

图像的显示是提高图像处理分析性能非常有用的一个手段,通过图像的显示,可以监视图像处理过程,并与处理分析交互地控制处理分析过程。

图像显示最重要的特性是图像的大小、光度分辨率、灰度线性、平坦能力和噪声特性等,这些显示特性将共同决定一个数字图像显示系统的质量及其在特定应用中的适用性等性能指标。

3.3.1 标准图像显示技术

Matlab显示图像的主要方法是调用image函数,该函数可创建一个句柄图形图像对象,并且包含设置该对象的各种属性的调用语法;此外,还提供了与image函数类似的imagesc 函数,利用该函数,可以实现对输入图像数据的自动缩放。同时,还包含了一个附加的显示函数,即imshow函数,与image和imagesc函数类似,imshow函数可用于创建句柄图形图像对象。此外,该函数也可以自动设置各种句柄属性和图像特征,以优化显示效果。

(1)imshow函数

当调用imshow函数显示图像时,将自动设置图形窗口、坐标轴和图像属性,以控制图像数据在MATLAB的解释方式。

在Matlab中,imshow函数的语法如下:

imshow(I,n)

imshow(I,[low,high])

imshow(BW)

imshow(…,display_option)

imshow(x,y,A, …)

imshow filename

h=imshow(…)

根据用户使用参数的不同和MATLAB工具箱的设置,imshow函数在调用时除了完成前面提到的属性设置外,还可以:①设置其他的图形窗口对象和坐标轴对象的属性以定制显示效果。例如,可以通过设置隐藏坐标轴及其标示;②包含或隐藏图像边框;③调用函数以显示没有彩色渐变效果的图像。

(2)显示索引图像

利用imshow函数显示MATLAB的索引图像时,可以同时指定图像的数据矩阵和颜色映射表,形如:

imshow(X,map)

其中,对于X中的每个像素,imshow都将其显示为存储在map映射表矩阵的相应的行所对应的颜色。

调用imshow函数显示灰度图像的语法如下:

imshow(I)

imshow(I,N)

其中:I为灰度图像数据矩阵,N为整数,用于指定对应于灰度颜色映射表中的索引数。

*例:I=imshow('windows.bmp');

imshow(I,64); %绘制出具有64个灰度等级的灰度图

*例:I=imshow('windows.bmp');

imshow(I,2); %绘制出具有2个灰度等级的灰度图,即黑白图。

(4)显示二进制位图

imshow函数显示二进制位图的语法如下:

imshow(BW)

如果该位图的图像矩阵属于类double,则imshow函数将其显示为灰度图来对待,图像数据矩阵中值0所对应的像素显示为黑色,值1所对应的像素显示为白色。

(5)显示RGB图像

显示RGB图像的语法如下:

imshow(RGB)

其中:RGB为一个m×n×3的图像数据矩阵。在Matlab中,该数据矩阵属于类double、类uint8或uint16。

(6)显示图形文件中的图像

通常情况下,在显示图像时,该图像的对象数据保存在MATLAB运行内存中的一个或多个变量中。但是,如果用户将图像保存在可以通过imread函数读取的图形文件中,则可通过下面的语法直接将其显示出来:

imshow filename

如果图像是多帧的,那么imshow将仅仅显示第一帧,这种调用格式对于图像扫描非常有用。

注意:在使用这种格式时,该图形文件必须在当前目录下,或在MATLAAB目录下。

如果图像数据没有保存在MATLAB工作平台中,可以通过使用getimage函数将从当前的句柄图形图像对象中获取图像数据。

*例:rgb=getimage;

下面的代码可以显示一幅小孩儿的图像:

imshow kids.tif

(7)显示非图像数据

非图像数据:是指其数据矩阵的元素值落在“合法”范围之外。

对于double数组来说,该范围是[0,1];

对于uint8数组来说,该范围是[0,255];

对于uint16数组来说,该范围是[0,65 535]。

例:假设将一个灰度图进行过滤操作,则得到的结果数据可能在“合法”范围之外。此时显示该结果数据必须使用下面的语法:

imshow(I,[low,high])

*例:先读取testpat.tif图形文件,然后对其进行过滤操作,再将结果数据显示出来:

J=filter([1 2;-1 -2],I);

imshow(I);

figure,imshow(J,[]);

3.3.2 特殊图像显示技术

在MATLAB的影像工具箱中,除了imshow函数外,还提供了一些实现特殊显示功能的函数。它们与MATLAB自身提供的图形函数相结合,为图像显示提供了各种特殊显示技术,包括有:

①图像显示中添加颜色条;

②显示多帧图像阵列;

③图像上的区域缩放;

④将图像纹理映射到表面对象上;

⑤显示多幅图像。

(1)添加颜色条;

在MATLAB的图像显示中,可以利用colorber函数将颜色条添加到坐标轴对象中。如果该坐标轴对象包含一个图像对象,则添加的颜色条将指示出该图像中不同颜色的数据值。

*例:先过滤一个类为uint8的图像,然后将其显示为灰度图,并添加颜色条:

I=imread('saturn.tif');

h=[1 2 1;0 0 ;-1 -2 -1];

J=filter2(h,I);

imshow(J,[]);

colorbar;

(2)显示多帧图像阵列;

MTTLAB支持的多帧图像的文件格式包括HDF和TIFF两种。文件一旦被读入MATLAB,多帧图像的显示帧数由矩阵的第四维数值来决定。

在多阵列中查看图像,有下面几种方式:

①独立显示每一帧,调用imshow函数;

②同时显示所有的帧,调用montage函数;

③将多帧阵列转换为动画电影,调用immovie函数。

1)单帧显示

利用MATLAB标准的索引方法指定帧号,调用imshow函数,就可独立显示特定的帧。例:load mri

imshow(D(:,:,:,7));

其中:D为MRI(磁共振图像)中的多帧图像阵列,调用imshow函数显示其中的第7帧。

2)多帧显示

调用montage函数可实现多帧显示,该函数的语法如下:

montage(I)

montage(BW)

montage(X,map)

montage(…)

例:显示MRI的所有帧的代码如下:

montage(D,map);

3)动画显示

利用immovie函数,可以从多帧图像阵列中创建Matlab电影动画。

值得注意的是:该函数只能应用于索引图像,所以,如果希望将其他类型的图像阵列转换为电影动画,则首先必须将该图像类型转换为索引类型。

例:mov=immovie(D,map);

colormap(map);

movie(mov)

(3)图像上的区域缩放;

利用zoom命令可实现图像上的任意区域的缩放。

在命令行中输入下面的代码:

zoom on

回车执行后,matlab的图形窗口对象进入区域缩放状态。此时,按下鼠标左键,拖动鼠标指示,则图形窗口中将出现以虚线框表示的选择矩形。松开鼠标键后,则该选中的区域将被放大到整个图形窗口的显示空间。

在放大区域中单击鼠标右键可将刚刚放大的图形恢复到原来的状态。

如果命令行输入下面的代码:

zoom off

则可关闭图形窗口的缩放功能。

(4)纹理映射

在Matlab中,专门提供了一个对图像进行纹理映射处理函数warp,使之显示在三维空间中。Wrap函数的语法格式如下:

warp(X,map)

warp(I,n)

warp(BW)

warp(RGB)

warp(z,…)

warp(x,y,z,…)

h=warp(…)

在Matlab中,纹理映射是利用双线性渐变算法将图像映射到某个表面栅格上。

*例:[x,y,z]=cylinder;

I=imread('testpat1.tif');

warp(x,y,z,I); %将testpat1.tif映射到圆柱体表面上。

有时图像可能不是按照所期望的形式进行纹理映射的,此时可以对纹理映射的外观进行修改,其方法之一就是修改坐标轴的Xdir、Ydir和Zdir属性值。

(5)显示多幅图像。

MATLAB没有对用户想要同时显示的图像数目进行限制,然而,由于受计算机硬件配置的影响,图像显示数目通常会存在一些系统限制。

显示多幅图像最简单的方法就是在不同的图形窗口中显示它们。imshow函数总是在当前窗口中显示一幅图像,如果想同时显示两幅图像,那么第二幅图像就会替代第一幅图像。为了避免图像在当前窗口中的覆盖现象,在调imshow函数之前可使用figure命令来创建一个

例:imshow(I)

figure,imshow(I2)

figure,imshow(I3)

当采用该方法时,创建的图形窗口初始化是空白的。

如果使用的是8位显示系统,那么必须确保调色板人口的总数不超过256。

注意:灰度图像总是使用调色板来进行显示的,所以这些图像所使用的颜色通道总数不能超过256。

为了避免产生同时显示图像的不正确的显示结果:

1)可采用对调色板进行操作的方法,使之使用较少的颜色

2)将图像转换为RGB格式再进行显示

3)使用ind2rgb函数将索引图像转换为RGB图像:imshow(ind2rgb(X,map))

4)简单使用cat命令将一幅灰度图像显示为一幅RGB图像:imshow(cat(3,I,I,I))

可以采用两种方法将多幅图像显示在同一个单独的图形窗口中。

①联合使用imshow函数和subplot函数;

②联合使用subimage函数和subplot函数;

subplot函数将一个图形窗口划分为多个显示区域,其语法格式为:

subplot(m,n,p)

这种格式将图形窗口划分为m×n个矩形显示区域,并激活第p个显示区域。

例:如果希望并排显示两幅图像,可使用以下语句:

[X1,map1]=imread('forest.tif');

[X2,map2]=imread('trees.tif');

subplot(1,2,1),imshow(X1,map1);

subplot(1,2,2),imshow(X2,map2);

若共享调色板出现的显示结果不令人满意,可以使用subimage函数来显示,也可以在装载图像时将所有图像映射到同一个调色板中,这个调色板不是共享调色板情况下所采用的某一幅图像的调色板,而是映射后包含所有图像调色板信息的一个新调色板。

subimage函数在显示图像之前首先将图像转换为RGB图像,因此不会出现调色板问题。该函数的语法格式为:

subimage(X,map) %在一个窗口里显示多个索引图像。

subimage(I) %在一个窗口里显示多个灰度图像。

subimage(RGB) %在一个窗口里显示多个真彩色图像。

subimage(x,y,…) %将图像按指定的坐标系(x,y)显示。

H=subimage(…) %返回图像对象的句柄,其中输入的图像可以是uint8或double类型。

以下代码将显示与上面同样的两幅图像,其程序清单为:

[X1,map1]=imread('forest.tif');

[X2,map2]=imread('trees.tif');

subplot(1,2,1),subimage(X1,map1);

subplot(1,2,2),subimage(X2,map2);

3.3.3图像显示中的常见问题

图像可能是一幅索引图像,这就意味显示这幅图像需要一个调色板。产生这个问题的原因可能是在装载索引图像时函数的调用方法不正确,正确调用格式如下:

[X,map]=imread('filename.ext');

另外,还有注意使用imshow函数的正确形式:

imshow(X,map);

(2)二值图像显示为全黑图像

使用islogical或whos命令检查该图像矩阵的逻辑标志是否置为on。如果图像是逻辑的,那么whos命令将在类型头部单词array后面显示logical。如果二值图像是自己创建的,那么产生这个问题的原因可能是图像类型为uint8,记住uint8类型有灰度图像变换范围是[0,255],而不是[0,1]。

(3)装载的是多帧图像,但是MATLAB却仅仅显示一帧图像

必须单独装载多帧图像的每一帧,可以使用一个for循环来实现。可以先调用imfinfo函数获知图像帧数和图像维数。

3.4 图像运算

3.4.1图像的点运算

点运算(对比度增强、对比度拉伸、灰度变换):是一种通过对图像中的每个像素(即像素点上的灰度值)进行计算,从而改善图像显示效果的操作。

点运算常用于改变图像的灰度范围及分布,是图像数字化及图像显示的重要工具。

典型的点运算应用包括:

①光度学标定:通过对图像传感器的非线性特性做出补偿来反映某些物理特性,如光照强度、

光密度等;

②对比度增强:调整图像的亮度、对比度,以便观察;

③显示标定:利用点运算使得图像在显示时能够突出所有用户感兴趣的特征;

④图像分割:为图像添加轮廓线,通常被用来辅助后续运算中的边界检测;

⑤图像裁剪:将输出图像的灰度级限制在可用范围。

MATLAB图像处理工具箱没有提供对图像进行直接点运算的函数,而将图像的点运算过程直接集成在某些图像处理函数组中(如:直方图均衡化函数histeq和imhist)。如果用户仅仅是希望对图像进行点运算处理,那么可充分利用MATTAB强大的矩阵运算能力,对图像数据矩阵调用各种MATLAB计算函数进行处理。

*例:将灰度图像使用的灰度变换函数进行线性点运算的程序清单:

rice=imread('rice.tif');

I=double(rice);

J=I*0.43+60;

rice2=uint8(J);

subplot(1,2,1),imshow(rice);

subplot(1,2,2),imshow(rice2);

3.4.2 图像的代数运算

图像的代数运算:是图像的标准算术操作的实现方法,是两幅输入图像之间进行点对点的加、减、乘、除运算后得到输出图像的过程。

集合。

使用图像处理工具箱中的图像代数运算函数无须再进行数据类型间的转换,这些函数能够接受8位无符号类型或16位无符号类型数据,并返回相同格式的图像结果。

值得注意的是:无论进行哪一种代数运算都要保证输入图像的大小相等,且类型相同。

针对代数运算的结果很容易超出数据类型允许的范围,图像的代数运算函数使用了以下截取规则使运算结果符合数据范围的要求:超出范围的整数数据将被截取为数据范围的极值,分数结果将被四舍五入。

(1)图像的加法运算

图像相加一般用于对同一场景的多幅图像求平均效果(平均是指效果而言,并非算术平均),以便有效地降低具有叠加性质的随机噪声。

MATLAB中的imadd函数用于进行两幅图像的加法或给一幅图像加上一个常数。该函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素之和作为输出图像。其调用格式为:

Z=imadd(X,Y)

其中,X和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果。两幅图像的像素值相加时产生的结果很可能超过图像数据类型所支持的最大值(称为溢出),当数据发生溢出时,该函数将数据截取为数据类型所支持的最大值,这种截取效果称之为饱和,为了避免这种现象出现,在进行加法计算前最好将图像类型转换为一种数据范围较宽的数据类型。例:两幅图像叠加

I=imread('rice.png');

J=imread('cameraman.tif');

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

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

K=imadd(I,J);

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

若不是两幅图像相加,而是给图像的每一个像素加上一个常数(使图像的亮度增加),同样可以采用imadd函数。

*例:RGB图像增加亮度

RGB1=imread('flower.tif');

RGB2=imadd(RGB1,50);

subplot(1,2,1),imshow(RGB1);

subplot(1,2,2),imshow(RGB2);

RGB1=imread('rice.png');

RGB2=imadd(RGB1,50);

subplot(1,2,1),imshow(RGB1);

subplot(1,2,2),imshow(RGB2);

(2)图像的减法运算

图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。

在MATLAB中,imsubtract函数用来将一幅图像从另一幅输入图像中减去或从一幅图像中减去一个常数。该函数将一幅图像的像素值从另一幅输入图像相应的像素值中减去,再将相应的像素值之差作为输出图像相应的像素值。该函数的调用格式为:

Z=imsubtract(X,Y)

减法操作时有时会导致某些像素变为一个负数,此时,该函数自动将这些负数截取为0。为了避免差值产生负值及像素值运算结果之间产生差异,可以调用imabsdiff函数,该函数将计算两幅图像相应像素差值的绝对值,其调用格式与imsubtract函数类似。

例:根据原始图像生成其背景亮度图像,然后再从原始图像中将背景亮度图像减去

rice=imread('rice.png');

background=imopen(rice,strel('disk',15));

rice2=imsubtract(rice,background);

subplot(1,2,1),imshow(rice);

subplot(1,2,2),imshow(rice2);

若希望从图像数据I的每一像素中减去一个常数,可以将上述调用格式中的Y替换为一个指定的常数值,如:Z=imsubtract(I,50)

(3)图像的乘法运算

两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数通常称为缩放。缩放通常将产生比简单添加像偏移量自然得多的明暗效果。如果使用的缩放因数大于1,那么将增强图像的亮度,如果因数小于1,则会使图像变暗。

在MATLAAB中,使用immultiply函数实现两幅图形的乘法。该函数将两幅图像相应的像素值进行元素对元素的乘法,并将乘法的运算结果作为输出图像相应的像素值。其操作时将产生溢出现象,为了避免该现象产生,在执行前可将图像类型转换为一种数据范围较宽的数据类型。该函数的调用格式为:

Z=immultiply(X,Y)

其中,Z=X*Y。

例:使用给定的缩放因数对moon.tif的图像进行缩放的程序清单:

I=imread('moon.tif');

J=immultiply(I,1.2);

subplot(1,2,1),imshow(I);

subplot(1,2,2),imshow(J);

(4)图像的除法运算

图像除法运算又称为比率变换,给出的是相应像素值的变化比率,而不是每个像素的绝对差异,可用于校正成像设备的非线性影响。

在MATLAB中使用imdivide函数进行两幅图像的除法,该函数对两幅输入图像的所有相应像素执行元素对元素的除法操作,并将得到的结果作为输出图像的相应像素值。其调用格式为:

Z=imdivide(X,Y)

其中,Z=X/Y。

例:将rice.tif的两幅图像进行除法运算的程序清单:

rice=imread('rice.png');

background=imopen(rice,strel('disk',15));

rice2=imsubtract(rice,background);

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

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

Ip=imdivide(rice,rice2);

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

执行图像四则代数运算操作较好的一个办法是使用函数imlincomb ,该函数按照双精度执行所有代数运算操作,而且仅对最后的输出结果进行截取,其调用格式为:

Z=imlincomb(A,X,B,Y,C)

其中,Z=A*X+B*Y+C 。MATLAB 会自动根据输入参数判断需要进行的运算。

3.4.3 图像几何运算

在处理图像的过程中,有时需要对图像的大小和几何关系进行调整,如:对图像进行缩放及旋转,这时图像中每个像素的值都要发生变化。数字图像的坐标是整数,经过这些变换之后的坐标不一定是整数,因此要对变换之后的整数坐标位置的像素值进行估计。

MATLAB 提供了一些函数实现这些功能。这些函数支持所有的图像类型,可实现对图像进行缩放、旋转、裁剪等几何操作。

(1)图像的插值

插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实曲线,用这个重建的函数便可求出任意的函数值。

设已知函数值为12,,,ωω 则未知点x 的函数值通过插值可以表示为:

()()1L

i i i f x h x x ω==-∑

其中h(?)为插值核函数,i ω为权系数。插值算法的数值精度及计算量与插值核函数有关,插

值核函数的设计是插值算法的核心。

MATLAB 中的imresize 函数和imrotate 函数用于二维图像的插值。MATLAB 影像处理工具箱提供了三种插值方法:

①最近邻插值(nearest neighbor interpolation )

②双线性插值(bilinear interpolation )

③双立方插值(bicubic interpolation )

1)最近邻插值:是最简单的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。该算法的数学表示为:

()()()()111122

k k k k k f x f x x x x x x -+=+<<+ 最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。对于索引图像来说,它是惟一可行的方法。不过,最近邻插值法的值核频域特性不好,从它的傅立叶谱上可以看出,它与理想低通滤波器的性质相差较大。当图像含有精细内容,也就是高频分量时,用这种方法实现倍数放大处理,在图像中可以明显看出块状效应。

2)双线性插值:该方法输出像素值是它在输入图像中2×2邻域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。

3)双立方插值:该种插值核为三次函数,其插值邻域的大小为4×4。它的插值效果比较好,但相应的计算量较大。

这三种插值方法的运算方式基本类似。对于每一种来说,为了确定插值像素点的数值,必须在输入图像中查找到与输出像素相对应的点。这三种插值方法的区别在于其对像素点赋

2×2矩阵所包含的有效点的加权平均值;双立方插值输出像素的赋值为4×4矩阵所包含的有效点的加权平均值。

(2)图像大小调整

利用imresize函数通过一种特定的插值方法可实现图像大小的调整。该函数的语法如下:B=imresize(A,m,method)

B=imresize(A,[mrows,ncols],method)

B=imresize(…, method,n)

B=imresize(…,method,h)

这里参数method用于指定插值的方法,可选的值为‘nearest’、‘bilinear’、‘bicubic’,如果没有指定插值方法,则该函数将采用缺省的近邻插值(nearest)方法。

上述第一种返回图像大小等于A的大小乘以放大系数m,若放大系数m设置在0到1之间,则B比A小,即图像缩小;若放大系数m设置在大于1,则图像放大。

第二种语法返回一个mrows行、ncols列的图像,若mrows和ncols定义的长度比原图不同,则图像会产生变形。

在使用bilinear和bicubic方法缩小图像时,为消除引入的高频成分,imresize使用一个前端平滑滤波器,默认的滤波器尺寸为11×11。也可以通过参数n指定滤波器的尺寸,即为上述第三种语法结构。对于mearest插值方法,imresize不使用前端滤波器,除非函数明确指定。

第四种语法结构是使用用户设计的插值核h进行插值,h可以看作一个二维FIR滤波器,例:使用不同的插值方法对图像进行放大的程序清单:

load woman2

subplot(2,2,1),imshow(X,map);

X1=imresize(X,2,'nearest');

subplot(2,2,2),imshow(X1,[]);

X2=imresize(X,2,'bilinear');

subplot(2,2,3),imshow(X2,[]);

X3=imresize(X,2,'bicubic');

subplot(2,2,4),imshow(X3,[]);

由图可见,在进行小倍数放大时,最近邻插值方法的效果还可以,双线性插值方法的结果有些模糊,双立方插值效果最好。

(3)图像旋转

在对数字图像进行旋转的时候,各像素的坐标会发生变化使得旋转之后不能正好落在整数坐标处,需要进行插值。在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,利用imrotate函数可以通过一种特定的插值方法来改变图像的显示角度。该函数的语法格式如下:

B=imrotate(A,angle,method)

使用指定的插值方法(同imresize函数中的插值方法)逆时针方向将图像A旋转angle 角度。返回图像B通常大于A,包含整个旋转图像。若对图像进行顺时针旋转,则angle取负值。一般来说,旋转后的图像会比原来图大,超出原来图像的部分值为0,为了使返回的图像与原来图像大小相同,可采用如下的格式:

B=imrotate(A,angle,method,’crop’)

其功能是:通过指定crop参数对旋转后的图像进行剪切(取图像的中间部分),把图像进行angle角度旋转,然后返回和A大小相同的中间部分。

I=imread('flowers.tif');

J=imrotate(I,35,'bilinear');

subplot(1,2,1),imshow(I);

subplot(1,2,2),imshow(J);

I=imread('rice.png');

J=imrotate(I,35,'bilinear');

subplot(1,2,1),imshow(I);

subplot(1,2,2),imshow(J);

(4)图像剪裁

在进行图像处理过程中,有时只需要处理图像中的一部分,或者需要将某某部分取出,这样就要对图像进行剪切。工具箱中的imcrop函数将图像剪裁成指定矩形区域。该函数的语法如下:

I2=imcrop(I)

X2=imcrop(X,map)

RGB2=imcrop(RGB)

其功能是:交互式地对灰度图像、索引图像和真彩色图像进行剪切,显示图像,允许用鼠标指定剪裁矩形。

I2=imcrop(I,rect)

X2=imcrop(X,map,rect)

RGB2=imcrop(RGB,rect)

其功能是:非交互式指定剪裁矩阵,按指定的矩阵框rect剪切图像,rect为四元素向量[xmin,ymin,width,height],分别表示矩形的左下角和长度及宽度,这些值在空间坐标中指定。

[…]=imcrop(x,y, …)

其功能是:在指定坐标系(x,y)中剪切图像。

[A,rect]=imcrop(…)

[x,y,A,rect]=imcrop(…)

其功能是:在用户交互剪切图像的同时返回剪切框的参数rect。

*例:从ic,tif图像中剪取鼠标左键拖动选取的矩形区域,并以新的图形窗口显示出来的程序清单:

imshow ic.tif;

I=imcrop;

imshow(I);

imshow kids.tif;

I=imcrop;

figure;imshow(I);

3.4.4 图像邻域和块操作

输出图像中的每个像素值都是对应的输入像素及其某个邻域内的像素共同决定的,这种图像运算称为邻域运算。

通常邻域是指一个远远小于图像尺寸的形状规则的像素块,例如:2×2、3×3、4×4的正方形,或用来近似表示圆及椭圆等形状的多边形。一幅图像所定义的所有邻域应该具有相

邻域运算与点运算一起形成了最基本、最重要的图像处理方法,尤其是滑动邻域操作,经常被用于图像的线性滤波和二值形态操作。

邻域操作包括滑动邻域操作和分离邻域操作(图像块操作)两种类型。

在进行滑动邻域操作时,输入图像将以像素为单位进行处理,也就是说,对于输入图形的每一个像素,指定的操作将决定输出图像相应的像素值。

分离邻域操作(图像块操作)是基于像素邻域的数值进行的,输入图像一次处理一个邻域,即图像被划分为矩阵邻域,分离邻域操作将分别对每一个邻域进行操作,求取相应输出邻域的像素值。

(1) 滑动邻域操作

在MATLAB中,滑动邻域是一个像素集,像素集包含的元素由中心像素的位置决定。滑动邻域操作一次只处理一个图像像素。当操作从图像矩阵的一个位置移动到另一个位置时,滑动邻域也以相同的方向运动。

通常,对于m×n的滑动邻域来说,中心像素的计算方法为:floor(([m,n]+1)/2)

在MATLAB进行滑动邻域操作的过程如下:

①选择像素;

②确定该像素的滑动邻域;

③调用适当的函数对滑动邻域中的元素进行计算;

④查找输出图像与输入图像对应处的像素,将该像素的数值设置为上一步中得到的返回值。即将计算结果作为输出图像中对应的像素的值;

⑤对输入图像的每一个像素点,重复1)到4)的操作。

MATLAB提供的几种用于邻域操作的函数:

1)colfilt函数:该函数用于快速的邻域操作,其调用格式为:

B=colfilt(A,[m n],block_type,fun)

其功能是:实现快速的邻域操作,图像的尺寸为m×n,block_type为指定块的移动方式,即,当为’distinct’时,图像块不重叠;当为’sliding’时,图像块滑动。fun为运算函数,其形式为y=fun(x)。

B=colfilt(A,[m n],block_type,fun,P1,P2)

其功能是:指定fun中除x以外的其他参数P1、P2、…。

B=colfilt(A,[m n],[mblock nblock],block_type,fun,…)

其功能是:为节省内存按mblock×nblock的图像块对图像A进行块操作。

*例:下面是一个对图像alumgrns.tif进行滑动平均操作程序清单:

I=imread('alumgrns.tif');

I2=colfilt(I,[5 5],'sliding','mean');

imshow(I);

figure,imshow(I2,[]);

I=imread('rice.png');

I2=colfilt(I,[5 5],'sliding','mean');

imshow(I);

figure,imshow(I2,[]);

对于滑动邻域操作,colfilt函数为图像中每个像素建立一个列向量,向量的各元素对应该像素的邻域元素。

colfilt函数可以根据需要对图像进行补零。

独的值。MATLAB中很多函数具有这种功能(如:mean、std),返回值赋给输出图像中对应的像素。

例:对输入图像处理,输出图像为每个像素邻域的最大值。

I=imread('rice.png');

f=inline('max(x)');

J=colfilt(I,[8 8],'sliding',f);

imshow(I);

figure,imshow(J);

对于图像块操作,colfilt函数把每个图像块排列成一列,构成一个临时矩阵。如果需要,可以对图像进行补零。

colfilt函数把原始图像排列成临时矩阵之后,将其传入自定义函数,自定义函数必须返回和临时矩阵大小相同的矩阵。然后colfilt函数再把结果重新排列成原始图像的格式。

*例:利用colfilt函数把输入图像8×8的图像块均值赋予图像块中所有元素的程序清单:

I=imread('saturn.tif');

imshow(I)

f=inline('ones(64,1)*mean(x)');

I2=colfilt(I,[8 8],'distinct',f);

figure,imshow(I2,[])

I=imread('rice.png');

imshow(I)

f=inline('ones(64,1)*mean(x)');

I2=colfilt(I,[8 8],'distinct',f);

figure,imshow(I2,[])

2)nlfilter函数:该函数是通用的滑动窗操作函数,其语法格式为:

B=nlfilter(A,[m n],fun)

它是一个通用的滑动窗操作,图像块的尺寸为m×n。

B=nlfilter(A,[m n],fun,

P1,P2,…)

其中,A表示输入图像,[m n]指定邻域大小,fun是一个返回值为标量的计算函数,如果该计算函数需要参数,那么参数P1、P2、…将紧跟在fun参数后。返回值B是一个与输入图像相同大小的图像矩阵。

B=nlfilter(A,’indexed’,…)

它是用于对索引图像的滑动窗操作。

例:调用nlfilter函数进行滑动操作程序清单:

I=imread('tire.tif');

f=inline('max(x(:))');

J=nlfilter(I,[3 3],f);

subplot(1,2,1),imshow(I);

subplot(1,2,2),imshow(J);

(2)图像块操作

图像块操作是将图像的数据矩阵划分为同样大小的矩形区域的操作,它是图像分析和图

加快图像处理的速度。

MATLAB进行图像块操作的函数有:

1)blkproc函数:该函数能够将每个显示块从影像中提取出来,然后将其作为参数传递给任何用户函数量(即用户指定的函数)。此外,blkproc函数还将由用户函数返回的显示块进行组合,从而生成最后的输出图像。其语法格式如下:

B=blkproc(A,[m n],fun)

其功能是:对图像A的每个不同m×n块应用函数fun进行处理,必要时补加0。fun为运算函数,其形式为y=fun(x),可以是一个包含函数名的字符串,或表达式的字符串。另外,还可以将用户函数指定为一个嵌入式函数(即inline函数)。在这种情况下,出现在blkproc 函数中的嵌入式函数不能带有任何引用标记。

B=blkproc(A,[m n],fun,P1,P2,…)

其功能是:指定fun中除x以外的其他参数P1、P2、…。

B=blkproc(A,[m n],[mborder nborder],fun,…)

其功能是:指定图像块的扩展边界mborder和nborder,实际图像块大小为(m+2×mborder)×(n+2×nborder)。允许进行图像块操作时,各图像块之间有重叠。也就是说,在对每个图像块进行操作时,可以为图像块增加额外的行和列。当图像块有重叠时,blkproc函数把扩展的图像块传递给自定义的函数。

B=blkproc(A,’index’,…)

它是用于对索引图像的块操作。

例:计算图像8×8区域的局部标准差的程序清单:

I=imread('tire.tif');

f=inline('uint8(round(std2(x)*ones(size(x))))');

I2=blkproc(I,[8 8],f);

subplot(1,2,1),imshow(I);

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

当需要进行邻域之间相互重叠时,在进行邻域处理时要重点考虑重叠部分的像素值。为了实现重叠方法,可利用以下语句:

*B=blkproc(A,[4 8],[1 2],’fun’)

2)bestblk函数:该函数用于选择图像块的尺寸,其语法格式为:

siz=bestblk([m n],k)

其功能是:返回对尺寸为m×n的图像的块划分siz,k为图像块长度和宽度的最大值。

[mb,nb]=bestblk([m n],k)

其功能是:返回mb和nb分别为图像块的行数和列数。

3)col2im函数:该函数用于将向量重新排列成图像块,其作用在于提高其运算速度。但是处理完后还需将向量排列成矩阵。其语法格式为:

B=col2im(A,[m n],[mm nn],block_type)

其功能是:将图像A的每一列重新排列成m×n的图像块,block_type为指定排列的方式,即:当block_type为distinct时,图像块不重叠;当block_type为sliding时,图像块滑动。用这些图像块组合成mm×nn的图像A。

4)im2col函数:该函数实现将图像块排列成向量的功能,其语法格式为:

B=im2col(A,[m n], block_type)

其功能是:将图像A的每一个m×n块转化成一列,重新组合成图像B。block_type为

matlab图像处理的几个实例

Matlab图像处理的几个实例(初学者用) 1.图像的基本信息及其加减乘除 clear,clc; P=imread('yjx.jpg'); whos P Q=imread('dt.jpg'); P=im2double(P); Q=im2double(Q); gg1=im2bw(P,0.3); gg2=im2bw(P,0.5); gg3=im2bw(P,0.8); K=imadd(gg1,gg2); L=imsubtract(gg2,gg3); cf=immultiply(P,Q); sf=imdivide(Q,P); subplot(421),imshow(P),title('郁金香原图'); subplot(422),imshow(gg1),title('0.3'); subplot(423),imshow(gg2),title('0.5'); subplot(424),imshow(gg3),title('0.8'); subplot(425),imshow(K),title('0.3+0.5'); subplot(426),imshow(L),title('0.5-0.3'); subplot(427),imshow(cf),title('P*Q'); subplot(428),imshow(sf),title('P/Q'); 2.图像缩放 clear,clc; I=imread('dt.jpg'); A=imresize(I,0.1,'nearest'); B=imresize(I,0.4,'bilinear'); C=imresize(I,0.7,'bicubic'); D=imresize(I,[100,200]); F=imresize(I,[400,100]); figure subplot(321),imshow(I),title('原图'); subplot(322),imshow(A),title('最邻近插值'); subplot(323),imshow(B),title('双线性插值'); subplot(324),imshow(C),title('二次立方插值'); subplot(325),imshow(D),title('水平缩放与垂直缩放比例为2:1'); subplot(326),imshow(F),title('水平缩放与垂直缩放比例为1:4');

数字图像处理四个实验报告,带有源程序

数字图像处理 实验指导书 学院:通信与电子工程学院 专业:电子信息工程 班级: 学号: 姓名: XX理工大学

实验一 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基本数据类型的数值数组本身十分适于表达图像,矩阵的元素和图像的像素之间有着十分自然的对应关系。 图1 图像的采样和量化 根据图像数据矩阵解释方法的不同,MA TLAB把其处理为4类: 亮度图像(Intensity images) 二值图像(Binary images) 索引图像(Indexed images) RGB图像(RGB images)

Matlab 图像处理相关函数命令大全

Matlab 图像处理相关函数命令大全 一、通用函数: colorbar 显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',axes_handle) getimage 从坐标轴取得图像数据 语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \ [...]=getimage imshow 显示图像 语法:imshow(I,n) \ imshow(I,[low high]) \ imshow(BW) \ imshow(X,map) \ imshow(RGB)\ imshow(...,display_option) \ imshow(x,y,A,...) \ imshow filename \ h=imshow(...) montage 在矩形框中同时显示多幅图像 语法:montage(I) \ montage(BW) \ montage(X,map) \ montage(RGB) \ h=montage(...) immovie 创建多帧索引图的电影动画 语法:mov=immovie(X,map) \ mov=immovie(RGB) subimage 在一副图中显示多个图像 语法:subimage(X,map) \ subimage(I) \ subimage(BW) \ subimage(RGB) \ subimage(x,y,...) \ subimage(...) truesize 调整图像显示尺寸 语法:truesize(fig,[mrows mcols]) \ truesize(fig)

MATLAB常用函数大全

一、MATLAB常用的基本数学函数 abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方 real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数 round(x):四舍五入至最近整数 fix(x):无论正负,舍去小数至最近整数 floor(x):地板函数,即舍去正小数至最近整数ceil(x):天花板函数,即加入正小数至最近整数rat(x):将实数x化为分数表示 rats(x):将实数x化为多项分数展开 sign(x):符号函数 (Signum function)。 当x<0时,sign(x)=-1; 当x=0时,sign(x)=0; 当x>0时,sign(x)=1。 rem(x,y):求x除以y的馀数 gcd(x,y):整数x和y的最大公因数 lcm(x,y):整数x和y的最小公倍数 exp(x):自然指数 pow2(x):2的指数 log(x):以e为底的对数,即自然对数或 log2(x):以2为底的对数 log10(x):以10为底的对数 二、MATLAB常用的三角函数 sin(x):正弦函数 cos(x):余弦函数

tan(x):正切函数 asin(x):反正弦函数 acos(x):反馀弦函数 atan(x):反正切函数 atan2(x,y):四象限的反正切函数 sinh(x):超越正弦函数 cosh(x):超越馀弦函数 tanh(x):超越正切函数 asinh(x):反超越正弦函数 acosh(x):反超越馀弦函数 atanh(x):反超越正切函数 三、适用於向量的常用函数有: min(x): 向量x的元素的最小值 max(x): 向量x的元素的最大值 mean(x): 向量x的元素的平均值 median(x): 向量x的元素的中位数 std(x): 向量x的元素的标准差 diff(x): 向量x的相邻元素的差 sort(x): 对向量x的元素进行排序(Sorting)length(x): 向量x的元素个数 norm(x): 向量x的欧氏(Euclidean)长度sum(x): 向量x的元素总和 prod(x): 向量x的元素总乘积 cumsum(x): 向量x的累计元素总和 cumprod(x): 向量x的累计元素总乘积 dot(x, y): 向量x和y的内积 cross(x, y): 向量x和y的外积 四、MATLAB的永久常数

图像处理实例(含Matlab代码)

信号与系统实验报告——图像处理 学院:信息科学与工程学院 专业:2014级通信工程 组长:** 组员:** 2017.01.02

目录 目录 (2) 实验一图像一的细胞计数 (3) 一、实验内容及步骤 (3) 二、Matlab程序代码 (3) 三、数据及结果 (4) 实验二图像二的图形结构提取 (5) 一、实验内容及步骤 (5) 二、Matlab程序代码 (5) 三、数据及结果 (6) 实验三图像三的图形结构提取 (7) 一、实验内容及步骤 (7) 二、Matlab程序代码 (7) 三、数据及结果 (8) 实验四图像四的傅里叶变化及巴特沃斯低通滤波 (9) 一、实验内容及步骤 (9) 二、Matlab程序代码 (9) 三、数据及结果 (10) 实验五图像五的空间域滤波与频域滤波 (11) 一、实验内容及步骤 (11) 二、Matlab程序代码 (11) 三、数据及结果 (12)

实验一图像一的细胞计数 一、实验内容及步骤 将该图形进行一系列处理,计算得到途中清晰可见细胞的个数。 首先,由于原图为RGB三色图像处理起来较为麻烦,所以转为灰度图,再进行二值化化为黑白图像,得到二值化图像之后进行中值滤波得到细胞分布的初步图像,为了方便计数对图像取反,这时进行一次计数,发现得到的个数远远多于实际个数,这时在进行一次中值滤波,去掉一些不清晰的像素点,剩下的应该为较为清晰的细胞个数,再次计数得到大致结果。 二、Matlab程序代码 clear;close all; Image = imread('1.jpg'); figure,imshow(Image),title('原图'); Image=rgb2gray(Image); figure,imshow(Image),title('灰度图'); Theshold = graythresh(Image); Image_BW = im2bw(Image,Theshold); Reverse_Image_BW22=~Image_BW; figure,imshow(Image_BW),title('二值化图像'); Image_BW_medfilt= medfilt2(Image_BW,[3 3]); figure,imshow(Image_BW_medfilt),title('中值滤波后的二值化图像'); Reverse_Image_BW = ~Image_BW_medfilt; figure,imshow(Reverse_Image_BW),title('图象取反'); Image_BW_medfilt2= medfilt2(Reverse_Image_BW,[20 20]); figure,imshow(Image_BW_medfilt2),title('第二次中值滤波的二值化图像'); [Label, Number]=bwlabel(Image_BW_medfilt,8);Number [Label, Number]=bwlabel(Image_BW_medfilt2,8);Number

数字图像处理实验指导书模板

《数字图像处理》实验指导书 编写: 罗建军 海南大学三亚学院 10月

目录 一、概述 ....................................................................... 错误!未定义书签。 二、建立程序框架 ....................................................... 错误!未定义书签。 三、建立图像类 ........................................................... 错误!未定义书签。 四、定义图像文档实现图像读/写.............................. 错误!未定义书签。 五、实现图像显示 ....................................................... 错误!未定义书签。 六、建立图像处理类................................................... 错误!未定义书签。 七、实现颜色处理功能............................................... 错误!未定义书签。 (一) 亮度处理................................................................. 错误!未定义书签。 (二) 对比度处理............................................................. 错误!未定义书签。 (三) 色阶处理................................................................. 错误!未定义书签。 (四) 伽马变换................................................................. 错误!未定义书签。 (五) 饱和度处理............................................................. 错误!未定义书签。 (六) 色调处理................................................................. 错误!未定义书签。 八、实现几何变换功能............................................... 错误!未定义书签。 (一) 图像缩放................................................................. 错误!未定义书签。 (二) 旋转......................................................................... 错误!未定义书签。 (三) 水平镜像................................................................. 错误!未定义书签。 (四) 垂直镜像................................................................. 错误!未定义书签。 (五) 右转90度................................................................. 错误!未定义书签。 (六) 左转90度................................................................. 错误!未定义书签。 (七) 旋转180度............................................................... 错误!未定义书签。 九、实现平滑锐化功能............................................... 错误!未定义书签。 十、图像处理扩展编程............................................... 错误!未定义书签。

matlab 常用函数汇总

matlab 常用函数汇总 编程2008-07-10 21:45:20 阅读46 评论0 字号:大中小订阅matlab常用函数 图形注释 Title 图形标题 Xlabel X轴标记 Ylabel Y轴标记 Text 文本注释 Gtext 用鼠标放置文本 Grid 网格线 MATLAB编程语言 Function 增加新的函数 Eval 执行由MA TLAB表达式构成的字串 Feval 执行由字串指定的函数 Global 定义全局变量 程序控制流 If 条件执行语句 Else 与if命令配合使用 Elseif 与if命令配合使用 End For,while和if语句的结束 For 重复执行指定次数(循环) While 重复执行不定次数(循环) Break 终止循环的执行 Return 返回引用的函数 Error 显示信息并终止函数的执行 交互输入 Input 提示用户输入 Keyboard 像底稿文件一样使用键盘输入 Menu 产生由用户输入选择的菜单 Pause 等待用户响应 Uimenu 建立用户界面菜单 Uicontrol 建立用户界面控制 一般字符串函数 Strings MATLAB中有关字符串函数的说明 Abs 变字符串为数值 Setstr 变数值为字符串 Isstr 当变量为字符串时其值为真 Blanks 空串 Deblank 删除尾部的空串 Str2mat 从各个字符串中形成文本矩阵 Eval 执行由MA TLAB表达式组成的串 字符串比较 Strcmp , , , 比较字符串 Findstr 在一字符串中查找另一个子串

Upper 变字符串为大写 Lower 变字符串为小写 Isletter 当变量为字母时,其值为真 Isspace 当变量为空白字符时,其值为真 字符串与数值之间变换 Num2str 变数值为字符串 Int2str 变整数为字符串 Str2num 变字符串为数值 Sprintf 变数值为格式控制下的字符串 Sscanf 变字符串为格式控制下的数值 十进制与十六进制数之间变换 Hex2num 变十六进制为IEEE标准下的浮点数Hex2dec 变十六制数为十进制数 Dec2hex 变十进制数为十六进制数 建模 Append 追加系统动态特性 Augstate 变量状态作为输出 Blkbuild 从方框图中构造状态空间系统Cloop 系统的闭环 Connect 方框图建模 Conv 两个多项式的卷积 Destim 从增益矩阵中形成离散状态估计器Dreg 从增益矩阵中形成离散控制器和估计器Drmodel 产生随机离散模型 Estim 从增益矩阵中形成连续状态估计器Feedback 反馈系统连接 Ord2 产生二阶系统的A、B、C、D Pade 时延的Pade近似 Parallel 并行系统连接 Reg 从增益矩阵中形成连续控制器和估计器Rmodel 产生随机连续模型 Series 串行系统连接 Ssdelete 从模型中删除输入、输出或状态ssselect 从大系统中选择子系统 模型变换 C2d 变连续系统为离散系统 C2dm 利用指定方法变连续为离散系统 C2dt 带一延时变连续为离散系统 D2c 变离散为连续系统 D2cm 利用指定方法变离散为连续系统 Poly 变根值表示为多项式表示 Residue 部分分式展开 Ss2tf 变状态空间表示为传递函数表示 Ss2zp 变状态空间表示为零极点表示

MATLAB中图像函数大全 详解及例子

图像处理函数详解——strel 功能:用于膨胀腐蚀及开闭运算等操作的结构元素对象(本论坛随即对膨胀腐蚀等操作进行讲解)。 用法:SE=strel(shape,parameters) 创建由指定形状shape对应的结构元素。其中shape的种类有 arbitrary' 'pair' 'diamond' 'periodicline' 'disk' 'rectangle' 'line' 'square' 'octagon 参数parameters一般控制SE的大小。 例子: se1=strel('square',6) %创建6*6的正方形 se2=strel('line',10,45) %创建直线长度10,角度45 se3=strel('disk',15) %创建圆盘半径15 se4=strel('ball',15,5) %创建椭圆体,半径15,高度5

图像处理函数详解——roipoly 功能:用于选择图像中的多边形区域。 用法:BW=roipoly(I,c,r) BW=roipoly(I) BW=roipoly(x,y,I,xi,yi) [BW,xi,yi]=roipoly(...) [x,y,BW,xi,yi]=roipoly(...) BW=roipoly(I,c,r)表示用向量c、r指定多边形各点的X、Y坐标。BW选中的区域为1,其他部分的值为0. BW=roipoly(I)表示建立交互式的处理界面。 BW=roipoly(x,y,I,xi,yi)表示向量x和y建立非默认的坐标系,然后在指定的坐标系下选择由向量xi,yi指定的多边形区域。 例子:I=imread('eight.tif'); c=[222272300270221194]; r=[21217512112175]; BW=roipoly(I,c,r); imshow(I)

数字图像处理程序

数字图像处理程序

数字图像处理实验 图像处理实验(一)直方图 灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特 征更加明显。 灰度级的直方图给出了一幅图像概貌的描述,通过修改灰度直方图来得到图像 增强。 1、灰度直方图 (1)计算出一幅灰度图像的直方图 clear close all I=imread('004.bmp'); imhist(I) title('实验一(1)直方图'); (2)对灰度图像进行简单的灰度线形变换, figure subplot(2,2,1) imshow(I); title('试验2-灰度线性变换'); subplot(2,2,2) histeq(I); (3)看其直方图的对应变化和图像对比度的变化。 原图像 f(m,n) 的灰度范围 [a,b] 线形变换为图像 g(m,n),灰度范围[a’,b’]公式:g(m,n)=a’+(b’-a’)* f(m,n) /(b-a) figure subplot(2,2,1) imshow(I) J=imadjust(I,[0.3,0.7],[0,1],1); title(' 实验一(3)用g(m,n)=a’+(b’-a’)* f(m,n) /(b-a)进行变换 '); subplot(2,2,2) imshow(J) subplot(2,2,3) imshow(I) J=imadjust(I,[0.5 0.8],[0,1],1); subplot(2,2,4) imshow(J) (4) 图像二值化(选取一个域值,(5) 将图像变为黑白图像) figure subplot(2,2,1)

基于Matlab基本图像处理程序

图像读入 ●从图形文件中读入图像 imread Syntax: A = imread(filename, fmt) filename:指定的灰度或彩色图像文件的完整路径和文件名。 fmt:指定图形文件的格式所对应的标准扩展名。如果imread没有找到filename所制定的文件,会尝试查找一个名为filename.fmt的文件。 A:包含图像矩阵的矩阵。对于灰度图像,它是一个M行N列的矩阵。如果文件包含 RGB真彩图像,则是m*n*3的矩阵。 ●对于索引图像,格式[X, map] = imread(filename, fmt) X:图像数据矩阵。 MAP:颜色索引表 图像的显示 ●imshow函数:显示工作区或图像文件中的图像 ●Syntax: imshow(I) %I是要现实的灰度图像矩阵 imshow(I,[low high],param1, val1, param2, val2,...) %I是要现实的灰度图像矩阵,指定要显示的灰度范围,后面的参数指定显示图像的特定参数 imshow(RGB) imshow(BW) imshow(X,map) %map颜色索引表 imshow(filename) himage = imshow(...) ●操作:读取并显示图像 I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读取图像数据 imshow(I);%显示原图像 图像增强 一.图像的全局描述 直方图(Histogram):是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。 图像直方图(Image Histogram):是表示数字图像中亮度分布的直方图,用来描述图象灰度值,标绘了图像中每个亮度值的像素数。 灰度直方图:是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图 像中某种灰度出现的频率。描述了一幅图像的灰度级统计信息。是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率。 归一化直方图:直接反应不同灰度级出现的比率。纵坐标表示具有各个灰度级别的像

MATLAB常用指令

MATLAB常用指令 1.常用命令-->管理命令和函数 addpath 添加目录到MATLAB搜索路径 doc 在Web浏览器上现实HTML文档 help 显示Matlab命令和M文件的在线帮助 helpwin helpdesk help lookfor 在基于Matlab搜索路径的所有M文件中搜索关键字partialpath 部分路径名 path 所有关于路径名的处理 pathtool 一个不错的窗口路径处理界面 rmpath 删除搜索路径中指定目录 type 显示指定文件的内容 ver 版本信息 version 版本号 web 打开web页 what 列出当前目录吓所有的M文件Mat文件和Mex文件whatsnew 显示readme文件 which 显示文件位置 (返回) 2.常用命令-->管理变量和工作区(输入输出、内存管理等) clear 从内存中删除 disp 显示文本或数组内容 length 数组长度(最长维数) load 重新载入变量(从磁盘上) mlock 锁定文件,防止文件被错误删除 munlock 解锁文件 openvar 在数组编辑器中打开变量 pack 整理内存空间 save 保存变量到文件8*) size 数组维数 who 列出内存变量 whos 列出内存变量,同时显示变量维数 workspace 显示工作空间窗口 (返回) 3.常用命令-->管理命令控制窗口(command窗口) clc 清空命令窗口 echo 禁止或允许显示执行过程 format 设置输出显示格式 home 光标移动到命令窗口左上角 more 设置命令窗口页输出格式 (返回)

数字图像处理实验报告

数字图像处理实验报告

实验一数字图像处理编程基础 一、实验目的 1. 了解MA TLAB图像处理工具箱; 2. 掌握MA TLAB的基本应用方法; 3. 掌握MA TLAB图像存储/图像数据类型/图像类型; 4. 掌握图像文件的读/写/信息查询; 5. 掌握图像显示--显示多幅图像、4种图像类型的显示方法; 6. 编程实现图像类型间的转换。 二、实验内容 1. 实现对图像文件的读/写/信息查询,图像显示--显示多幅图像、4种图像类型的显示方法、图像类型间的转换。 2. 运行图像处理程序,并保存处理结果图像。 三、源代码 I=imread('cameraman.tif') imshow(I); subplot(221), title('图像1'); imwrite('cameraman.tif') M=imread('pout.tif') imview(M) subplot(222), imshow(M); title('图像2'); imread('pout.bmp') N=imread('eight.tif') imview(N) subplot(223), imshow(N); title('图像3'); V=imread('circuit.tif') imview(V) subplot(224), imshow(V); title('图像4');

N=imread('C:\Users\Administrator\Desktop\1.jpg') imshow(N); I=rgb2gary(GRB) [X.map]=gary2ind(N,2) RGB=ind2 rgb(X,map) [X.map]=gary2ind(I,2) I=ind2 gary(X,map) I=imread('C:\Users\dell\Desktop\111.jpg'); subplot(231),imshow(I); title('原图'); M=rgb2gray(I); subplot(232),imshow(M); [X,map]=gray2ind(M,100); subplot(233),imshow(X); RGB=ind2rgb(X,map); subplot(234),imshow(X); [X,map]=rbg2ind(I); subplot(235),imshow(X); 四、实验效果

matlab图像处理代码

附录 MATLAB图像处理命令  1.applylut  功能: 在二进制图像中利用lookup表进行边沿操作。 语法: A = applylut(BW,lut) 举例 lut = makelut('sum(x(:)) == 4',2); BW1 = imread('text.tif'); BW2 = applylut(BW1,lut); imshow(BW1) figure, imshow(BW2) 相关命令: makelut 2.bestblk  功能: 确定进行块操作的块大小。 语法: siz = bestblk([m n],k) [mb,nb] = bestblk([m n],k) 举例 siz = bestblk([640 800],72) siz = 64 50 相关命令: blkproc 3.blkproc  功能:

MATLAB 高级应用——图形及影像处理 320 实现图像的显式块操作。 语法: B = blkproc(A,[m n],fun) B = blkproc(A,[m n],fun,P1,P2,...) B = blkproc(A,[m n],[mborder nborder],fun,...) B = blkproc(A,'indexed',...) 举例 I = imread('alumgrns.tif'); I2 = blkproc(I,[8 8],'std2(x)*ones(size(x))'); imshow(I) figure, imshow(I2,[]); 相关命令: colfilt, nlfilter,inline 4.brighten  功能: 增加或降低颜色映像表的亮度。 语法: brighten(beta) newmap = brighten(beta) newmap = brighten(map,beta) brighten(fig,beta) 相关命令: imadjust, rgbplot 5.bwarea  功能: 计算二进制图像对象的面积。 语法: total = bwarea(BW) 举例 BW = imread('circles.tif'); imshow(BW);

图像增强及MATLAB实现

《数字图像处理》课程设计 课设题目:图像增强与MATLAB实现学校学院:华东交通大学理学院 学生班级:13级信息计算(2)班学生:超 学生学号:20130810010216 指导老师:自柱

图像增强与MATLAB实现 摘要 数字图像处理是指将图像信号转换成数字格式并利用计算机对其进行处理的过程。图像增强是数字图像处理的过程中经常采用的一种方法,它对提高图像质量起着重要的作用。本文先对图像增强的原理进行概述,然后对图像增强的方法分类并给出直方图增强、对比度增强、平滑和锐化等几种常用的增强方法的理论基础,通过Matlab实验得出的实际处理效果来对比各种算法的优缺点,讨论不同的增强算法的技术要点,并对其图像增强方法进行性能评价。 关键字:图像;图像增强;算法

目录 一、MATLAB的简介 (1) 1.1MATLAB主要功能 (1) 二、MATLAB的主要功能 (1) 2.1数字增强技术概述 (1) 2.2数字图像的表示 (2)

三、直方图的均衡化 (2) 3.1图像的灰度 (2) 3.2灰度直方图 (2) 3.3直方图均衡化 (3) 四、图像二值化 (5) 4.1图像二值化 (5) 五、对比度增强 (7) 5.1对比度增强 (7) 5.2灰度调整 (8) 5.3对数变换 (9) 六、滤波 (10) 6.1平滑滤波 (10) 6.2线性平滑滤波程序: (11) 6.3非线性滤波 (12) 七、锐化 (18) 八、参考文献 (19) 九、自我评价 (20)

一、Matlab的简介 1.1 MATLAB主要功能 MATLAB是建立在向量、数组和矩阵基础上的一种分析和仿真工具软件包,包含各种能够进行常规运算的“工具箱”,如常用的矩阵代数运算、数组运算、方程求根、优化计算及函数求导积分符号运算等;同时还提供了编程计算的编程特性,通过编程可以解决一些复杂的工程问题;也可绘制二维、三维图形,输出结果可视化。目前,已成为工程领域中较常用的软件工具包之一。 二、MATLAB的主要功能 2.1数字增强技术概述 图像增强是按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些信息使得图像更加实用。图像增强技术主要包含直方图修改处理、图像平滑处理、图像尖锐化处理等。 图像增强技术主要包括:直方图修改处理,图像平滑处理,图像尖锐化处理,彩色图像处理。从纯技术上讲主要有两类:频域处理法和空域处理法。 频域处理法主要是卷积定理,采用修改图像傅立叶变换的方法实现对图像的增强处理技术;空域处理法:是直接对图像中的像素进行处理,基本上是以灰度映射变换为基础的。

数字图像处理实验

学院计算机与通信工程学院专业生物医学工程专业 班级51111 学号5111133 姓名杨静 指导教师贾朔 2014年04月21日

实验一图像的基本运算 一、实验目的: 1、掌握图像处理中的点运算、代数运算、逻辑运算和几何运算及应用。 2、掌握各种运算对于图像处理中的效果。 二、实验内容: 1、(1)选择一幅图像lena8.jpg,设置输入/输出变换的灰度级范围,a=0.2,b=0.6,c=0.1,d=0.9. (2)设置非线性扩展函数的参数c=2. (3)采用灰度级倒置变换函数s=255-r进行图像变换 (4)设置二值化图像的阈值,分别为level=0.4,level=0.7 解:参考程序如下: I=imread('C:\lena8.jpg'); figure; subplot(2,3,1); imshow(I); title('原图'); J=imadjust(I,[0.3;0.6],[0.1;0.9]); %设置灰度变换的范围 subplot(2,3,2); imshow(J); title('线性扩展'); I1=double(I); %将图像转换为double类型 I2=I1/255; %归一化此图像 C=2; K=C*log(1+I2); %求图像的对数变换 subplot(2,3,3); imshow(K); title('非线性扩展'); M=im2bw(I,0.5); M=~M; %M=255-I; %将此图像取反 %Figure subplot(2,3,4); imshow(M); title('灰度倒置'); N1=im2bw(I,0.4); %将此图像二值化,阈值为0.4 N2=im2bw(I,0.7); %将此图像二值化,阈值为0.7 subplot(2,3,5); imshow(N1); title('二值化阈值0.4'); subplot(2,3,6); imshow(N2); title('二值化阈值0.7');

图像处理matlab程序实例

程序实例 1旋转: x=imread('d:\MATLAB7\work\flower.jpg'); y=imrotate(x,200,'bilinear','crop'); subplot(1,2,1); imshow(x); subplot(1,2,2); imshow(y) 2.图像的rgb clear [x,map]=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shh1.jpg');y=x(90:95,90:95);imshow(y)R=x(90:95,90:95,1);G=x(90:95,90:95,2);B=x(90:95,90:95,3);R,G,B 3.加法运算clear I=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shh3.jpg');J=imnoise(I,'gaussian',0,0.02);%向图片加入高斯噪声subplot(1,2,1),imshow(I);%显示图片subplot(1,2,2),imshow(J);K=zeros(242,308);%产生全零的矩阵,大小与图片的大小一样for i=1:100%循环100加入噪声J=imnoise(I,'gaussian',0,0.02);J1=im2double(J);K=K+J1;end K=K/100; figure,imshow(K);save

4.减法 clear I=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shao.jpg'); J=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shao1.jpg'); K=imsubtract(I,J);%实现两幅图相减 K1=255-K;%将图片求反显示 figure;imshow(I); title('有噪声的图'); figure;imshow(J); title('原图'); figure;imshow(K1); title('提取的噪声'); save 5.图像的乘法 H=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shao.jpg'); I=immultiply(H,1.2);将此图片乘以1.2 J=immultiply(H,2); subplot(1,3,1),imshow(H); title('原图'); subplot(1,3,2),imshow(I); title('·放大1.2'); subplot(1,3,3),imshow(J); title('放大2倍'); 6除法运算 moon=imread('moon.tif'); I=double(moon); J=I*0.43+90; K=I*0.1+90; L=I*0.01+90; moon2=uint8(J); moon3=uint8(K); moon4=uint8(L); J=imdivide(moon,moon2); K=imdivide(moon,moon3); L=imdivide(moon,moon4); subplot(2,2,1),imshow(moon); subplot(2,2,2),imshow(J,[]); subplot(2,2,3),imshow(K,[]); subplot(2,2,4),imshow(L,[]);

数字图像处理实验报告

数字图像处理实验 报告 学生姓名:学号: 专业年级: 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()同样可以通过除以一个常数来改变原始图像的亮度,可用来改变图像的灰度级,其典型运用是比值图像处理。 加法运算的一个重要应用是对同一场景的多幅图像求平均值 减法运算常用于检测变化及运动的物体,图像相减运算又称为图像差分运算,差分运算还可以用于消除图像背景,用于混合图像的分离。

相关主题
文本预览
相关文档 最新文档