matlab图像处理公式总结

创建M文件的文本编辑器 : 1.可通过在命令输入窗口键入edit
2.在File菜单栏New,Blank M-File实现
帮助 :可在命令窗口里面输入help或者helpbrowser


Matlaby图像文件格式 :
BMP(Windows Bitmap) Windows通用文件格式
JPEG(Joint Photographic Experts Group) 高度压缩的图像文件格式
TIFF(Tagged Image File Format) 主要适用于排版印刷
PCX(Windows Paintbrush)
PNG(Portable Network Graphics)
HDF(Hierarchical Data Format)
XWD(X Windows Dump)
GIF(Graphics Interchange Format)

imread(‘filename’):读入图图片,filename是一个含有图像文件全名的字符串,包括文件的扩展名
单引号‘’来界定filename字符串

[X,MAP]=imread(‘FILENAME.FMT’)
其中:
FILENAME-为需要读入的图像文件名
FMT-为图像格式
MAP:当图像为索引图像时,MAP为该图像的调色板


size(I) : 函数size可以给出图像的行数和列数, 如果size前面没有变量,则存在ans变量里。
如果有变量 [M,N]=size(I) 则该命令将返回函数的行数M和列数N

图像差值放大 :
I=imread('1.jpg');
J = imresize(I,10);
imshow(I),title('原图像')
figure,imshow(J),title('放大后的图像');

// B = imresize(A,m)返回原图A的m倍放大的图像(m小于1时效果是缩小)。


imshow(I, G) :G是显示该图像的灰度级数,若将G省略,则默认的灰度级数为256

imshow(I, [low high]) :会将所有小于或等于low的值都显示为黑色,所有大于或等于high的值都显示为白色
界于low和high之间的值将以默认的级数显示为中等亮度值

imshow(I,[]) :可以将变量low设置为数组f的最小值,将变量high设置为数组f的最大值
该函数用来显示动态范围较小的图像时非常有用

colorbar : 显示一个色彩条
I=imread('moon.tif');
imshow(I,256)
colorbar

bw1=zeros(100,100); //生成一个100x100的矩阵
bw1(2:2:98,2:2:98)=1; //行和列都是隔2取点
imshow(bw1); //显示

BW=imread('circles.tif'); //取反显示
imshow(~BW);


Matlab图像类型 :
索引图像 :直接把像素值作为RGB调色板下标的图像。包括一个数据矩阵及一个颜色映像矩阵
灰度图像 :是包含灰度级(量度)的图像。仅包含一个数据矩阵,其中数据矩阵中的每一个数据代表了
一定范围内的灰度值(0~255)
RGB图像 :真彩图像、用RGB三原色表示图像色彩信息。
二进制图像 : 显示黑、白信息

的图像,每一个像素值由三个数值来指定红、绿和蓝颜色分量。
需要一个数据矩阵,每个像素只取两个灰度值



函数imshow可以自动对读入的图像进行调整显示,以获得最佳的显示效果。
Imshow(I,[low high])
I:待显示的图像
[low high]:图像数据的值域

显示灰度图像 :Imshow(I,[100 200])
显示二值图像 :Imshow(BW)
显示索引图像 :Imshow(X,map)
显示真彩图像 :Inshow(RGB)




显示二值图像 :
clf
BW=imread('circles.tif');
imshow(BW,[1 0 0;0 0 1]);

imshow(X,MAP) :
显示索引图像,X为数据图像矩阵,MAP为调色板。
[X,MAP]=imread('canoe.tif');
imshow(X,MAP);
colorbar

显示伪彩色图像 :
I=imread('moon.tif');
imshow(I,jet(256))
colorbar

显示真彩色图像 :
rgb=imread('flowers.tif');
imshow(rgb);

直接显示图像 :
imshow('moon.tif');
I=getimage;

subimage :
多图显示多个调色板的图像
【例】
load trees; //加载trees.m文件
[x2,map2]=imread('forest.tif');
subplot(2,1,1),subimage(X,map);colorbar
subplot(2,1,2),subimage(x2,map2);colorbar

不用专用函数显示多图 :
load trees;
[x2,map2]=imread('forest.tif');
subplot(2,1,1),imshow(x2,map2);colorbar
subplot(2,1,2),imshow(X,map);colorbar





函数impixelinfo用来交互显示某个像素的亮度值。该函数可以显示覆盖在图像上的光标。
当光标随着鼠标在图像上移动时,光标所在位置的坐标和该点的亮度值会在图像窗口下方显示出来。

读取图像信息 :
可以通过调用imfinfo函数获得与图像文件有关的信息,
格式如下 :
INFO=imfinfo('FILENAME' ,'FMT')
其 中:
返回的INFO是Matlab的一个结构体





如果需要显示多幅图像,可以在命令窗口加figure函数:例如:imshow(I), figure, imshow(f)

注意 :只要用逗号或分号正确地分隔开了不同的命令,一行中可以写几条命令
还可以使用 subplot命令实现多幅图像显示




imwrite(f, ’filename’) :该函数的功能是使用函数imwrite可以将图像写到磁盘上的filename命令的文件中。
Filename必须包含文件的扩展名。例如:imwrite (I, ‘newimage.bmp’)

imwrite函数 :
imwrite(I,'文件名','文件格式')-保存无调色板的图像
imwrite(X,MAP,'文件名','文件格式')-保

存有调色板的图像
imwrite(...,'文件名')-文件名中含格式
imwrite(...,'参数','值')-指定保存参数
文件格式:bmp、jpg、pcx、tif

将tif图像保存为jpg图像 :
[x,map]=imread('canoe.tif');
imwrite(x,map,'canoe.jpg','JPG','Quality',75); //表示什么意思Quality

imfinfo('1.jpg') %显示图象文件1.jpg的属性
A=imread ('1.jpg'); %读图象1.jpg,并将像素值阵列赋给矩阵A
imshow(A); %显示图象A
A ↙ %显示图象A的像素值(若图象过大,显示时间就会过长,按ctrl+C终止)
whos↙ %显示内存中各变量的类型,包括A

图像的灰度直方图 :
a=imread('1.jpg');
imshow(a);
figure, imhist(a,64);
%作a的灰度直方图,64 可改为128, 256等


亮度图像(灰度图像):数据矩阵I表示灰度值,如果是uint8类型,数值范围可以是[0,255];
如果是uint16类型,数值范围为[0,65536]

二值图像:在MATLAB数组中只有0和1两个取值。

索引图像:包括一个数据矩阵X(整数,对应MAP中的行号)和色图阵MAP

RGB图像:包括一个m*n*3的数据矩阵

G=im2bw(I,T) : 该函数的功能就是将亮度图像I转换为一幅二值图像G。
在亮度图像中,亮度值小于T的像素点全部转换为二值图像中值为0的像素点
在亮度图像中,亮度值大于T的像素点全部转换为二值图像中值为1的像素点
该函数规定T的取值必须在0-1内
首先MATLAB会将亮度图像的值I归一化到[0,1]间,再进行转换

G=rgb2gray(I) : 该函数将彩色图像数组I转换为灰度图像G

im2uint8 将图像转换成uint8类型

im2double 将图像转换成double类型

thresh=graythresh(I); %自动设定所需的最优化阈值



imadd : 两幅图像叠加
I = imread( ‘lena.bmp’ );
J = imread( ‘sun.bmp‘ );
K = imadd(I,J)
subplot(2,2,1), imshow(I)
subplot(2,2,2), imshow(J)
subplot(2,2,3), imshow(K)

图像整体亮度增加 :
I = imread(‘lena.bmp');
J=imadd(I, 50);
subplot(1,2,1), imshow(I)
subplot(1,2,2), imshow(J)


两幅图像相减 :
I = imread(‘lena.bmp');
J=imread(‘sun.bmp');
K=imsubtract(I,J);
subplot(2,2,1), imshow(I)
subplot(2,2,2), imshow(J)
subplot(2,2,3), imshow(K)

图像整体亮度减小 :
I = imread(‘lena.bmp');
J=imsubtract(I, 50);
subplot(1,2,1), imshow(I)
subplot(1,2,2), imshow(J)

亮度缩放 :
I = imread(‘lena.bmp');
J = immultiply(I,0.5);
K = immultiply(I,2);
subplot(1,3,1), imshow(I)
subplot(1,3,2), imshow(J)
subp

lot(1,3,3), imshow(K)

两幅图像相乘(通常无意义) :
I = imread(‘lena.bmp');
I = uint16(I); //图像转换成16位的
J=imread(‘sun.bmp');
J=uint16(J);
K=immultiply(I,J);
imshow(K)

亮度缩放 :
I = imread(‘lena.bmp');
J = imdivide(I,0.5);
K = imdivide(I,2);
subplot(1,3,1), imshow(I)
subplot(1,3,2), imshow(J)
subplot(1,3,3), imshow(K)

两幅图像相除(通常无意义) :
I = imread('lena.bmp');
J=imread('sun.bmp');
K= imdivide(I,J);
imshow(K,[])

图像缩放 :
imresize(A,scale,method)
imresize(A,[mrows ncols],method)
method :
Nearest:最近邻插值
Bilinear:双线性插值
Bicubic:双三次插值,系统默认值
J=imread('lena.bmp');
X1=imresize(J,0.5,’nearest’);
X2=imresize(J,0.5,'bilinear');
X3=imresize(J,0.5,'bicubic');
figure,imshow(J)
figure,imshow(X1)
figure,imshow(X2)
figure,imshow(X3)

图像旋转 :
imrotate(A,angle,method):逆时针为正,顺时针为负
I=imread('lena.bmp')
J=imrotate(I,45,'bilinear');
figure,imshow(I)
figure,imshow(J)

I=imread('1.jpg');
J=imrotate(I,30,'bilinear');
imshow(I);title('原图像')
figure,imshow(J),title('旋转后的图像');

// B = imrotate(A,angle,method)
函数imrotate对图像进行旋转,参数method用于指定插值的方法
可选用的值为'nearest'(最邻近法),
'bilinear'(双线性插值)
'bicubic'(双三次插值),默认为'nearest'
一般说来旋转后的图像会比原图大,超出原图部分值为0


imadjust :
g=imadjust(f,[low_in high_in],[low_out high_out], gamma)
将图像f中的亮度值映像到g中的新值,即将low_in至high_in之间的值映射到
low_out至high_out之间的值
low_in以下的值映射为low_out,high_in以上的值映射为high_out.
参数gamma指定了曲线的形状,该曲线用来映射f的亮度值,以便生成图像g
gamma=1是45度直线,gamma>1表示凹线,gamma<1表示凸线

I=imread(‘stone.bmp’);
g1=imadjust(I,[0 1],[0 1],0.5);
g2=imadjust(I,[0 1],[0 1],1);
g3=imadjust(I,[0 1],[0 1],2);
subplot(2,2,1),imshow(I)
subplot(2,2,2),imshow(g1)
subplot(2,2,3),imshow(g2)
subplot(2,2,4),imshow(g3)



图像对比度增强 :
I = imread('pout.tif');
J = imadjust(I,[0.3 0.7],[]);
imshow(I), figure, imshow(J)
J = imadjust(I,[low_in high_in],[low_out high_out])
返回图象I经过直方图调整后的图象J,[low_in

high_in]为图象中要变换的灰度范围,
[low_out high_out]指定了变换的灰度范围。




图像直方图函数imhist :
I=imread(‘stone.bmp’);
subplot(1,2,1),imshow(I);
subplot(1,2,2), imhist(I);

I=imread(‘red.bmp’); %读入图像
figure; %打开新窗口
[M,N]=size(I); %计算图像大小
[counts,x]=imhist(I,32); %计算有32个小区间的灰度直方图
counts=counts/M/N; %计算归一化灰度直方图各区间的值
stem(x,counts); %绘制归一化直方图



Histeq(I) I:待均衡的图像矩阵
histeq函数来实现直方图均衡化 :
将直方图中灰度最小和最大值分别拉伸到0和255
I=imread('image1.bmp');
G=imread('image2.bmp');
K=histeq(I);
subplot(3,2,1),imshow(I);
subplot(3,2,2),imhist(I);
subplot(3,2,3),imshow(G);
subplot(3,2,4),imhist(G);
subplot(3,2,5),imshow(K);
subplot(3,2,6),imhist(K);

线性滤波 :
B=imfilter(A,H)
A是输入图像,B是滤波后的输出图像,H是滤波模板

I=imread('rec.bmp');
subplot(2,2,1),imshow(I)
K1=imfilter(I,fspecial('average',[3 3])); //生成一个矩阵,均匀矩阵
K2=imfilter(I,fspecial('average',[5 5]));
K3=imfilter(I,fspecial('average',[7 7]));
subplot(2,2,2), imshow(K1)
subplot(2,2,3), imshow(K2)
subplot(2,2,4), imshow(K3)

均值滤波可以去除均值为0的白噪声,但却使得图像边缘模糊

加权均值滤波 :
I=imread('rec.bmp');
subplot(2,2,1),imshow(I)
K1=imfilter(I,fspecial('gaussian',[3 3]));
K2=imfilter(I,fspecial('gaussian',[5 5]));
K3=imfilter(I,fspecial('gaussian',[7 7]));
subplot(2,2,2),imshow(K1)
subplot(2,2,3),imshow(K2)
subplot(2,2,4),imshow(K3)

中值滤波就是用一个奇数点的移动窗口, 将窗口中心点的值用窗口内各点的中值代替

中值滤波函数 medfilt2() :
I=imread('board.bmp');
subplot(2,2,1),imshow(I)
K1=medfilt2(I,[3,3]);
K2=medfilt2(I,[5,5]);
K3=medfilt2(I,[7,7]);
subplot(2,2,2), imshow(K1)
subplot(2,2,3), imshow(K2)
subplot(2,2,4), imshow(K3)

傅里叶变换 :
load imdemos saturn2
imshow(saturn2);
B = fftshift(fft2(saturn2)); //用快速傅立叶变换计算
figure,imshow(log(abs(B)),[],'notruesize');

// B = fft2(I)
返回图象I的二维fft变换矩阵,输入图象I和输出图象 B大小相同



人为加噪声 :
I=imread('eight.tif');
J1=imnoi

se(I, 'gaussian',0,0.02);
J2=imnoise(I, 'salt & pepper',0.02);
J3=imnoise(I, 'speckle',0.02);
subplot(2,2,1),imshow(I),title('原图像');
subplot(2,2,2),imshow(J1),title('加高斯噪声');
subplot(2,2,3),imshow(J2),title('加椒盐噪声');
subplot(2,2,4),imshow(J3),title('加乘性噪声')
其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。
参数type和parameters用于确定噪声的类型和相应的参数。

%例图像加噪声再通过多次相加求平均的方法祛除噪声
[I,M]=imread('eight.tif');
J=imnoise(I,'gaussian',0,0.5);
subplot(1,2,1),imshow(I,M),title('原图像');
subplot(1,2,2),imshow(J,M),title('加噪声后图像');
k=zeros(242,308);
for i=1:100
J=imnoise(I,'gaussian',0,0.02);
J1=im2double(J);
k=k+J1;
End
k=k./100; %求图像的平均
figure;imshow(k),title('相加求平均后的图像');

figure : 创建一个新的窗口
subplot : 作用就是将多幅图像显示再同一幅图像显示对话框中
其语法格式为:
subplot(m,n,p) 其作用就是将一个图像显示对话框分成m行n列,并显示第p幅图像

Subplot(m,n,p)含义为:打开一个有m行n列图像位置的窗口, 并将焦点位于第p个位置上

figure;subplot(m,n,p);imshow(I);
































相关文档
最新文档