经常做做图像处理的东西,时间长了,有些函数就忘了,看到网上有人总结,收藏了。

1. 图像和图像数据

缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点数,所需存储量很大;MATLAB还支持另一种类型无符号整型(uint8),即图像矩阵中每个数据占用1个字节。

在使用MATLAB工具箱时,一定要注意函数所要求的参数类型。另外,uint8与double两种类型数据的值域不同,编程需注意值域转换。

从uint8到double的转换

---------------------------------------------

图像类型 MATLAB语句

---------------------------------------------

索引色 B=double(A)+1

索引色或真彩色 B=double(A)/255

二值图像 B=double(A)

---------------------------------------------

从double到uint8的转换

---------------------------------------------

图像类型 MATLAB语句

---------------------------------------------

索引色 B=uint8(round(A-1))

索引色或真彩色 B=uint8(round(A*255))

二值图像 B=logical(uint8(round(A)))

---------------------------------------------

2. 图像处理工具箱所支持的图像类型

2.1 真彩色图像

R、G、B三个分量表示一个像素的颜色。如果要读取图像中(100,50)处的像素值,可查看三元数据(100,50,1:3)。

真彩色图像可用双精度存储,亮度值范围是[0,1];比较符合习惯的存储方法是用无符号整型存储,亮度值范围[0,255]

2.2 索引色图像

包含两个结构,一个是调色板,另一个是图像数据矩阵。调色板是一个有3列和若干行的色彩映象矩阵,矩阵每行代表一种颜色,3列分别代表红、绿、蓝色强度的双精度数。

注意:MATLAB中调色板色彩强度[0,1],0代表最暗,1代表最亮。

常用颜色的RGB值

--------------------------------------------

颜色 R G B 颜色 R G B

--------------------------------------------

黑 0 0 1 洋红 1 0 1

白 1 1 1 青蓝 0 1 1

红 1 0 0 天蓝 0.67 0 1

绿 0 1 0 橘黄 1 0.5 0

蓝 0 0 1 深红 0.5 0 0

黄 1 1 0 灰 0.5 0.5 0.5

--------------------------------------------

产生标准调色板的函数

-------------------------------------------------

函数名 调色板

-------------------------------------------------

Hsv 色彩饱和度,以红色开始,并以红色结束

Hot 黑色-红色-黄色-白色

Cool 青蓝和洋红的色度

Pink 粉红的色度

Gray 线型灰度

Bone 带蓝色的灰度

Jet Hsv的一种变形,以蓝色开始,以蓝色结束

Copper 线型铜色度

Prim 三棱镜,交替为红、橘黄、黄、绿和天蓝

Flag 交替为红、白、蓝和黑

--------------------------------------------------

缺省情况下,调用上述函数灰产生一个64×3的调色板,用户也可指定调色板大小。索引色图像数据也有double和uint8两种类型。当图像数据为double类型时,值1代表调色板中的第1行,值2代表第2行……如果图像数据为uint8类型,0代表调色板的第一行,,值1代表第2行……

2.3 灰度图像

存储灰度图像只需要一个数据矩阵。

数据类型可以是double,[0,1];也可以是uint8,[0,255]

2.4 二值图像

二值图像只需一个数据矩阵,每个像素只有两个灰度值,可以采用uint8或double类型存储。

MATLAB工具箱中以二值图像作为返回结果的函数都使用uint8类型。

2.5 图像序列

MATLAB工具箱支持将多帧图像连接成图像序列。图像序列是一个4维数组,图像帧的序号在图像的长、宽、颜色深度之后构成第4维。

分散的图像也可以合并成图像序列,前提是各图像尺寸必须相同,若是索引色图像,调色板也必须相同。

可参考cat()函数 A=cat(4,A1,A2,A3,A4,A5)

3. MATLAB图像类型转换

图像类型转换函数

---------------------------------------------------------------------------

函数名 函数功能

---------------------------------------------------------------------------

dither 图像抖动,将灰度图变成二值图,或将真彩色图像抖动成索引色图像

gray2ind 将灰度图像转换成索引图像

grayslice 通过设定阈值将灰度图像转换成索引色图像

im2bw 通过设定亮度阈值将真彩色、索引色、灰度图转换成二值图

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

ind2rgb 将索引色图像转换成真彩色图像

mat2gray 将一个数据矩阵转换成一副灰度图

rgb2gray 将一副真彩色图像转换成灰度图像

rgb2ind 将真彩色图像转换成索引色图像

----------------------------------------------------------------------------

4. 图像文件的读写和查询

4.1 图形图像文件的读取

利用函数imread()可完成图形图像文件的读取,语法:

A=imread(filename,fmt)

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

[...]=imread(filename)

[...]=imread(filename,idx) (只对TIF格式的文件)

[...]=imread(filename,ref) (只对HDF格式的文件)

通常,读取的大多数图像均为8bit,当这些图像加载到内存中时,Matlab就将其存放在类uint8中。此为Matlab还支持16bit的PNG和TIF图像,当读取这类文件时,Matlab就将其存贮在uint16中。

注意:对于索引图像,即使图像阵列的本身为类uint8或类uint16,imread函数仍将颜色映象表读取并存贮到一个双精度的浮点类型的阵列中。

4.2 图形图像文件的写入

使用imwrite函数,语法如下:

imwrite(A,filename,fmt)

imwrite(X,map,filename,fmt)

imwrite(...,filename)

imwrite(...,parameter,value)

当利用imwrite函数保存图像时,Matlab缺省的方式是将其简化道uint8的数据格式。

4.3 图形图像文件信息的查询imfinfo()函数

5. 图像文件的显示

5.1 索引图像及其显示

方法一:

image(X)

colormap(map)

方法二:

imshow(X,map)

5.2 灰度图像及其显示

Matlab

7.0 中,要显示一副灰度图像,可以调用函数 imshow 或 imagesc (即imagescale,图像缩放函数)

(1) imshow 函数显示灰度图像

使用imshow(I)或使用明确指定的灰度级书目:

imshow(I,32)

由于Matlab自动对灰度图像进行标度以适合调色板的范围,因而可以使用自定义大小的调色板。其调用格式如下:

imshow(I,[low,high]) 其中,low 和 high 分别为数据数组的最小值和最大值。

(2) imagesc 函数显示灰度图像

下面的代码是具有两个输入参数的 imagesc 函数显示一副灰度图像

imagesc(1,[0,1]);

colormap(gray);

imagesc

函数中的第二个参数确定灰度范围。灰度范围中的第一个值(通常是0),对应于颜色映象表中的第一个值(颜色),第二个值(通常是1)则对应与颜色映象表中的最后一个值(颜色)。灰度范围中间的值则线型对应与颜色映象表中剩余的值(颜色)。

在调用

imagesc

函数时,若只使用一个参数,可以用任意灰度范围显示图像。在该调用方式下,数据矩阵中的最小值对应于颜色映象表中的第一个颜色值,数据矩阵中的最大值对应于颜色映象表中的最后一个颜色值。

5.3 RGB 图像及其显示

(1) image(RGB)

不管RGB图像的类型是double浮点型,还是 uint8 或 uint16 无符号整数型,Matlab都能通过 image

函数将其正确显示出来。

RGB8 = uint8(round(RGB64×255)); % 将 double 浮点型转换为 uint8

无符号整型

RGB64 = double(RGB8)/255; % 将 uint8 无符号整型转换为 double 浮点型

RGB16 = uint16(round(RGB64×65535)); % 将 double 浮点型转换为 uint16

无符号整型

RGB64 = double(RGB16)/65535; % 将 uint16 无符号整型转换为 double 浮点型

(2) imshow(RGB) 参数是一个 m×n×3 的数组

5.4 二进制图像及其显示

(1) imshow(BW)

在 Matlab 7.0 中,二进制图像是一个逻辑类,仅包括 0 和 1 两个数值。像素 0 显示为黑色,像素 1

显示为白色。

显示时,也可通过NOT(~)命令,对二进制图象进行取反,使数值 0 显示为白色;1 显示为黑色。

例如: imshow(~BW)

(2) 此外,还可以使用一个调色板显示一副二进制图像。如果图形是 uint8 数据类型,则数值 0

显示为调色板的第一个颜色,数值 1 显示为第二个颜色。

例如: imshow(BW,[1 0 0;0 0 1])

5.5 直接从磁盘显示图像

可使用一下命令直接进行图像文件的显示:

imshow filename

其中,filename 为要显示的图像文件的文件名。

如果图像是多帧的,那么 imshow 将仅显示第一帧。但需注意,在使用这种方式时,图像数据没有保存在Matlab 7.0

工作平台。如果希望将将图像装入工作台中,需使用 getimage

函数,从当前的句柄图形图像对象中获取图像数据,命令形式为:

rgb = getimage;

1、图像的变换

① fft2:fft2函数用于数字图像的二维傅立叶变换,如:

i=imread('104_8.tif');

j=fft2(i);

②ifft2::ifft2函数用于数字图像的二维傅立叶反变换,如:

i=imread('104_8.tif');

j=fft2(i);

k=ifft2(j);

2、模拟噪声生成函数和预定义滤波器

① imnoise:用于对图像生成模拟噪声,如:

i=imread('104_8.tif');

j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声

② fspecial:用于产生预定义滤波器,如:

h=fspecial('sobel');%sobel水平边缘增强滤波器h=fspecial('gaussian');%高斯低通滤波器

h=fspecial('laplacian');%拉普拉斯滤波器h=fspecial('log');%高斯拉普拉斯(LoG)滤波器

h=fspecial('average');%均值滤波器

3、图像的增强

①直方图:imhist函数用于数字图像的直方图显示,如:

i=imread('104_8.tif');

imhist(i);

②直方图均化:histeq函数用于数字图像的直方图均化,如:

i=imread('104_8.tif');

j=histeq(i);

③对比度调整:imadjust函数用于数字图像的对比度调整,如:

i=imread('104_8.tif');

j=imadjust(i,[0.3,0.7],[]);

④对数变换:log函数用于数字图像的对数变换,如:

i=imread('104_8.tif');

j=double(i);

k=log(j);

⑤基于卷积的图像滤波函数:filter2函数用于图像滤波,如:

i=imread('104_8.tif');

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

j=filter2(h,i);

⑥线性滤波:利用二维卷积conv2滤波, 如:

i=imread('104_8.tif');

h=[1,1,1;1,1,1;1,1,1];

h=h/9;

j=conv2(i,h);

⑦中值滤波:medfilt2函数用于图像的中值滤波,如:

i=imread('104_8.tif');

j=medfilt2(i);

⑧锐化

(1)利用Sobel算子锐化图像, 如:

i=imread('104_8.tif');

h=[1,2,1;0,0,0;-1,-2,-1];%Sobel算子

j=filter2(h,i);

(2)利用拉氏算子锐化图像, 如:

i=imread('104_8.tif');

j=double(i);

h=[0,1,0;1,-4,0;0,1,0];%拉氏算子

k=conv2(j,h,'same');

m=j-k;

3、图像边缘检测

①sobel算子 如:i=imread('104_8.tif');j = edge(i,'sobel',thresh)

②prewitt算子 如:i=imread('104_8.tif');j =

edge(i,'prewitt',thresh)

③roberts算子 如:i=imread('104_8.tif');j =

edge(i,'roberts',thresh)

④log算子 如:i=imread('104_8.tif');j = edge(i,'log',thresh)

⑤canny算子 如:i=imread('104_8.tif');j = edge(i,'canny',thresh)

⑥Zero-Cross算子 如:i=imread('104_8.tif');j =

edge(i,'zerocross',thresh)

4、形态学图像处理

①膨胀:是在二值化图像中“加长”或“变粗”的操作,函数imdilate执行膨胀运算,如:

a=imread('104_7.tif'); %输入二值图像

b=[0 1 0;1 1 1;0 1 0];

c=imdilate(a,b);

②腐蚀:函数imerode执行腐蚀,如:

a=imread('104_7.tif'); %输入二值图像

b=strel('disk',1);

c=imerode(a,b);

③开运算:先腐蚀后膨胀称为开运算,用imopen来实现,如:

a=imread('104_8.tif');

b=strel('square',2);

c=imopen(a,b);

④闭运算:先膨胀后腐蚀称为闭运算,用imclose来实现,如:

a=imread('104_8.tif');

b=strel('square',2);

c=imclose(a,b);

下列表格中除了个别函数外,其余函数都是图像处理工具箱提供的关于图像处理的函数,现摘录到此以备查找。

表1 图像显示

函数名

功能说明

函数名

功能说明

colorbar

颜色条显示

montage

按矩形剪辑方式显示多帧图像

getimage

从坐标系中获取图像数据

immovie

从多帧索引图像中制作电影

image

建立显示图像

movie

播放电影

subimage

在同一图像窗口显示多个图像

trueszie

调整图像显示大小

imagesc

调整数据并显示图像

warp

显示图像为纹理映射表面

imshow

图像显示

zoom

二维图形放大或缩小

表2 图像文件输入/输出

函数名

功能说明

函数名

功能说明

imread

图像文件读入

load

将以mat为扩展名的图像文件调入到内存

imwrite

图像写出

save

将内存变量中图像保存到mat文件中

dicomread

读取DICOM图像

dicomwrite

输出DICOM图像

iminfo

查看图形信息

表3 图像像素值及其统计

函数名

功能说明

函数名

功能说明

impixel

返回选定图像像素颜色值

imcontour

画图像数据轮廓(等高线,等值线)

improfile

图像中沿一个路径的数据值计算

imhist

求图像数据直方图

mean2

求均值

corr2

求相关系数

std2

求标准差

表4 图像分析

函数名

功能说明

函数名

功能说明

edge

灰度图像边缘检测

qtgetblk

获得四叉树分解块值

qtecomp

执行四叉树分解

qtsetblk

设置四叉树分解块值

表5 图像增强及平滑

函数名

功能说明

函数名

功能说明

imadjust

对比度调整

medfilt2

二维中值滤波器

histeq

直方图均衡

ordfilt2

顺序统计滤波器

imnoise

给图像增加噪声

wiener2

二维自适应除噪滤波器

表6 图像线性滤波及二维线性滤波器设计

函数名

功能说明

函数名

功能说明

conv2

二维卷积

freqz2

计算二维频率响应

convmtx2

计算二维卷积矩阵

fsamp2

用频率抽样设计二维FIR滤波器

convn

多维卷积

ftrans

用频率抽样转换二维FIRlbq

filter2

二维线性数字滤波器

fwind1

用一维窗口方法设计二维FIR滤波器

fspecial

产生预定义滤波器

fwind2

用二维窗口方法设计二维FIR滤波器

frespace

确定二维频率响应间隔

表7 图像变换

函数名

功能说明

函数名

功能说明

fft

计算一维快速Fourier变换

dct

计算离散余弦变换

ifft

计算一维FFT的逆变换

idct

计算离散反余弦变换

fft2

计算二维FFT

dct2

计算2D离散余弦变换

ifft2

计算二维逆FFT

idct2

计算2D反离散余弦变换

fftn

计算多维FFT

dctmtx

计算TCT矩阵

ifftn

计算多维逆FFT

radon

计算Radon变换

fftshift

直流分量移到频谱中心

表8 图像领域及操作

函数名

功能说明

函数名

功能说明

bestblk

选择块处理的块大小

colfilt

使用列方向函数进行领域运算

blkproc

对图像实行不同的块处理

im2col

重排图像块为矩阵列

col2im

重排矩阵列成图像块

nlfilter

进行一般领域计算

表9 二值图像操作

函数名

功能说明

函数名

功能说明

applylut

使用查找表进行领域操作

bwperim

确定二值图像中的目标边界

bwarea

计算二值图像中的目标区域

bwselect

选择二值图像中的目标

bweuler

计算二值图像中的欧拉数

dilate

对二值图像进行膨胀计算

bwfill

二值图像背景区域填充

erode

对二值图像进行寝蚀运算

bwlabel

标识二值图像中的连接成分

makelut

构造查找表(applylut)使用

bwmorph

二值图像形态运算

表10 基于区域的图像处理

函数名

功能说明

函数名

功能说明

roicolor

根据颜色选择要处理的区域

roifilt2

对要处理区域滤波

roifill

在任意区域内平滑差值

roipoly

选择要处理的多边形区域

表11 图像几何运算

函数名

功能说明

函数名

功能说明

imcrop

图像剪裁

imrotate

图像旋转

imresize

图像大小调整

interp2

二维数据差值

表12 图像颜色图操作

函数名

功能说明

函数名

功能说明

brighten

颜色图像变亮或变暗

colormap

设置获取图

cmpermute

重新排列颜色图中的颜色

imapprox

由颜色较少的图像近似索引图像

cmunique

寻找唯一的颜色图及相应的图像

rgbplot

绘制RGB颜色图

表13 颜色控件转换

函数名

功能说明

函数名

功能说明

hsv2rgb

将HSV颜色转化为RGB颜色值

mtsc2rgb

将NTSC值转换为RGB颜色空间值

rgb2hsv

将RGB颜色值转换为HSV颜色值

rgb2ntsc

将RGB值转换为NTSC颜色空间值

matlab 图像处理 新浪 应变,[转载]Matlab图像处理小结相关推荐

  1. matlab作动态函数曲线图,[转载]Matlab中使用Plot函数动态画图方法总结

    本帖最后由 sonictl 于 2012-12-31 12:18 编辑 请删除我 清楚超靠靠靠 没办法,一会儿限制这不能发表,那不能发表的.... [转载]Matlab中使用Plot函数动态画图方法总 ...

  2. matlab制作动画并保存,[转载]Matlab中动画的实现、制作和保存(转载Matlab技术论坛)...

    Matlab中动画的实现.制作和保存(转载Matlab技术论坛) 本帖由Matlab技术论坛原创,原帖参见 http://www.matlabsky.com/thread-592-1-1.html 光 ...

  3. matlab surf颜色,科学网[转载]matlab中控制mesh或者surf的颜色

    科学网[转载]matlab中控制mesh或者surf的颜色 曲面的顏色越发柔順滑腻,del2 (Z) 根據數值微分來產生矩陣 Z 的 discrete Laplacian, Y,surf 及 mesh ...

  4. matlab中的timer模块,[转载]Matlab中Timer的使用

    Matlab中Timer的使用 鉴于Matlab中缺乏多线程机制,使用Timer无疑是一个很重要的工具,Matlab中Timer是一个Java对象. (1)Timer 的定义 t=timer(); 设 ...

  5. matlab中图像映射实例,[转载]Matlab实现多种图像配准(转)

    本文讲述如何利用Matlab Image Processing Toolbox中的图像配准工具实现线性正投影.仿射.投影.多项式.分段线性.局部加权平均配准的过程. 实验平台 X86 PC,Windo ...

  6. matlab转变图像位深,[转载]matlab 图像处理命令 (转)

    图像增强 1. 直方图均衡化的 Matlab 实现 1.1 imhist 函数 功能:计算和显示图像的色彩直方图 格式:imhist(I,n) imhist(X,map) 说明:imhist(I,n) ...

  7. gammatone滤波器 matlab,Sleepwalking_新浪博客

    标签: octave dsp 在Octave 3.6以上的版本中使用fir1设计低通/高通/带通/带阻滤波器时,往往发现通带增益不正常,严重影响滤波器性能.例如以下代码设计一个20阶的低通滤波器并绘制 ...

  8. matlab曲线拟合 新浪,Matlab曲线拟合

    曲线拟合 已知离散点上的数据集 ,即已知在点集 上的函数值 ,构造一个解析函数(其图形为一曲线)使 在原离散点 上尽可能接近给定的 值,这一过程称为曲线拟合.最常用的曲线拟合方法是最小二乘法,该方法是 ...

  9. matlab读ascii的dat,[转载]MATLAB读取和调用各种数据(txt,dat,ma

    例2-1 %exam1.m [f,message]=fopen('fileexam1', 'r') if f==-1 disp (message); %显示错误信息 end 若文件fileexam1不 ...

最新文章

  1. 5.8fork父子进程
  2. spring mvc mysql配置_spring mvc配置数据库连接
  3. How myTask application is loaded in CreateFromAccount scenario
  4. python中csv文件把成绩加入_【学习笔记】python3中csv文件使用
  5. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(2月6日-2月12日)
  6. linux 格式化u盘_使用Universal USB Installer,打造你的U盘版Linux系统
  7. iOS申请发布证书-图文详解
  8. discuz-ucenter-api-for-java 中文乱码问题
  9. echarts如何获取后端的值_echarts图怎么用从后台获取的数据
  10. C语言--职工信息管理系统(含论文)
  11. 最新北京市生活常用电话一览表
  12. 极简数据抓取教程:山水济南,Say I love you with data
  13. 「应用安全」应用安全原则
  14. python3数据分析面试题--找出出现次数最多的名字并统计次数
  15. 58.union (联合查询)
  16. chipseq MACS2 call peaks 报错解决方法——创建虚拟环境
  17. Linux常见面试题,一网打尽!
  18. 离散点插值反距离加权法IDW C#实现
  19. 三星电子在中国正式召开三星Galaxy Note20系列新品体验发布会~~~~
  20. matlab怎么伯努利分布,伯努利分布 Bernoulli distribution

热门文章

  1. return、reutrn false、e.preventDefault、e.stopPropagation、e.stopImmediatePropagation的区别
  2. Ext.Net 学习 之 GridPanel、 Store 取值
  3. iOS多线程: pthread、NSThread
  4. Linux文本编辑器vim
  5. mybatis获取mysql自增主键_Mybatis获取数据库自增主键
  6. linux中有关于dhcp的选择题,未指定试题(2014-11-18):DHCP协议的功能是(1)。在Linux中提供DHCP服务的...
  7. java职称考试试题_SSM框架下的JAVA职称考试模拟系统
  8. ipqc的工作流程图_IPQC流程图
  9. axivion和astree_基于LabVIEW的IVI编程 IVI Programme Based on LabVIEW.pdf
  10. 2021 测试工作年终总结