matlab学习笔记入门.docx

上传人:b****8 文档编号:10923609 上传时间:2023-02-23 格式:DOCX 页数:15 大小:90.26KB
下载 相关 举报
matlab学习笔记入门.docx_第1页
第1页 / 共15页
matlab学习笔记入门.docx_第2页
第2页 / 共15页
matlab学习笔记入门.docx_第3页
第3页 / 共15页
matlab学习笔记入门.docx_第4页
第4页 / 共15页
matlab学习笔记入门.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

matlab学习笔记入门.docx

《matlab学习笔记入门.docx》由会员分享,可在线阅读,更多相关《matlab学习笔记入门.docx(15页珍藏版)》请在冰豆网上搜索。

matlab学习笔记入门.docx

matlab学习笔记入门

数据类:

double,unit8,unit16,unit32,int8,int16,int32,single,char,logical!

Matlab中所有数值计算都可以用double类来进行!

,unit8实际中最常用的图像

图像类型:

亮度图像,二值图像,索引图像,RGB图像

亮度图像:

是数据矩阵,若是unit8或uint16则是【0,255】或者是【0,65535】,若是double类,则像素取值是浮点数

二值图像只有:

0和1的逻辑数组!

简单操作:

读图并显示详细情况

>>f=imread('E:

\image\book.pgm');whos

NameSizeBytesClassAttributes

f289x33897682uint8

将图像垂直翻转:

>>f=imread('E:

\image\book.pgm');fp=f(end:

-1:

1,:

);imshow(fp)

将图像上下左右翻转:

f=imread('E:

\image\book.pgm');fc=f(end:

-1:

1,end:

-1:

1);imshow(fc)

将图像二次采样并显示详情:

>>fs=f(1:

2:

end,1:

2:

end);imshow(fs)

>>whosfs

NameSizeBytesClassAttributes

fs145x16924505uint8

将图像取出一部分:

>>fg=f(200:

250,200:

300);imshow(fg)

显示图像中的一条水平扫描线:

>>plot(f(200,:

将两幅图像进行相乘:

f=imread('c:

\image\liangdian.jpg');g=imread('c:

\image\shuiguo.jpg');

g=g(300:

715,500:

1149);f=f(1:

416,1:

650);f

d=double(f);gd=double(g);

p=fd.*gd;数组乘!

pmax=max(p(:

));pmin=min(p(:

));取最大最小值!

pn=mat2gray(p);figure,imshow(pn)

亮度变化:

函数imadjust是对灰度图像进行亮度变化的基本ipt工具:

g=imadjust(f,[low-inhigh-in],[low-inhigh-in],gamma)

Gamma为1线性映射,大于1,则映射被加权至更低(更暗的)输出值,小于一,加权至更高的输出值

明暗反转图像(负片)参数不同:

>>f=imread('E:

\image\book.pgm');g=imadjust(f,[01],[10]);imshow(g)

>>f=imread('E:

\image\book.pgm');g=imadjust(f,[01],[10],2);imshow(g)

>>f=imread('E:

\image\book.pgm');g=imadjust(f,[01],[10],0.5);imshow(g)

另外也可以这样:

进行明暗反转:

g=imcomplement(f);imshow(g)

将0.5到0.75之间的灰度级拓展到0-1,可用于突出我们感兴趣的亮度带

g2=g2=imadjust(f,[0.50.75],[01]);imshow(g2)

这个类似上面语句,但又更多的灰色调,方法是压缩灰度级的低端并扩展灰度级的高端

g3=imadjust(f,[],[],2);imshow(g3)

对数和对比度拉伸变换:

对数变换通过此式子完成:

g=c*log(1+double(f))

对8比特而言,最简便:

gs=im2uint8(mat2gray(g))

使用mat2gray可将值限定在0-1之间,im2uint可将值限定在0-255之间

使用对数变化减小动态范围:

>>g=im2uint8(mat2gray(log(1+double(f)));imshow(g)

图像g与原图像相比,在视觉方面的改善效果是非常明显的

函数intrans:

建立一个函数intrans,利用对比度拉伸方法得到增强图像

然后在主界面输入:

f=imread('E:

\image\book.pgm');g=intrans(f,'stretch',mean2(im2double(f)),0.9);figure,imshow(g)

 

函数gscale,亮度标度的函数:

g=gscale(f,method,low,high)

处理图像时,即管中间没问题,但想利用8比特或者16比特格式包村或查看一副图像时会出现问题,则要将图像调度在全尺度。

 

将彩色图像变成灰度图像并变小:

>>I=imread('d:

\image\tupian2.jpg');whosI

NameSizeBytesClassAttributes

I1000x666x31998000uint8

>>I=imread('d:

\image\tupian2.jpg');f=rgb2gray(I);s=f(1:

2:

end,1:

2:

end);imshow(s)

>>whoss

NameSizeBytesClassAttributes

s500x333166500uint8

生成并绘制图像的直方图:

把pgm图像的直方图显示出来:

h=imhist(f,b)b适用于形成直方图的收集箱的个数,即灰度级的个数

>>f=imread('E:

\image\book.pgm');imhist(f)

把彩色图片变成灰度图像再进行显示其直方图:

>>I=imread('d:

\image\tupian2.jpg');f=rgb2gray(I);imhist(s)

直方图经常使用条形图来进行显示:

Bar(horz,v,width)width为1竖条较明显,为零时是简单的垂直线。

默认为0.8

V是一个行向量,它包含将被绘制的点;

下面的语句将生成一幅条形图,其水平轴以10个灰度级为一组:

>>f=imread('E:

\image\book.pgm');h=imhist(f);h1=h(1:

10:

256);horz=1:

10:

256;bar(horz,h1)

>>axis([025501200])

>>set(gca,'xtick',0:

50:

255)

>>set(gca,'ytick',0:

200:

1200)

函数axis:

axis([xminxmaxyminymax])用来标注输出的图线的最大值最小值。

  其中,[xminxmaxyminymax]用来表示需要显示坐标的范围,xmin、xmax、ymin、ymax分别表示X、Y轴坐标最小和最大值。

gca表示获得当前轴,xtick和ytick按所示的间隔设置水平轴和垂直轴的刻度

利用title函数可以给图形加入标题:

title(‘titlestring’)‘’内为标题处出现的字符串,把语句加在上面语句之后即可

绘制杆状图:

>>f=imread('E:

\image\book.pgm');

>>h1=h(1:

10:

256);

>>horz=1:

10:

256;

>>stem(horz,h1,'fill')

>>axis([025501200])

>>set(gca,'xtick',0:

20:

255)

>>set(gca,'ytick',0:

100:

1200)

绘制plot图形:

使用函数plot(horz,v,'color-linestyle-maker')

可以自动设定坐标轴的取值范围和刻度线,此时我们使用以下函数:

ylim('auto')

xlim('auto')

直方图均衡化:

灰度级均衡化处理的最终结果是一幅扩展了的动态范围的图像,它具有较高的对比度,注意该变换函数只不过是一个累积分布函数

使用直方图并调用直方图均衡化技术来处理离散灰度级时,一般说来,处理后的图像的直方图将不再均匀,这源于变量的离散属性。

直方图均衡化使用函数histeq(f,nlev)

>>imshow(f);

>>figure,imhist(f);

>>ylim('auto')

>>g=histeq(f,256);

>>figure,imshow(g)

>>figure,imhist(g)

>>ylim('auto')

空间滤波:

线性空间滤波(暂缓····)

subplot(m,n,p)的意思:

plot是图的意思,

sub是子的意思。

subplot(m,n,p)生成m*n个子图,当前激活第p个子图。

 

彩色图像不能直接进行傅立叶变换,图像处理中很多情况下都是把一幅彩色图像分成三个类似灰度图像(一般是red,green,blue)来进行处理的。

至于进行傅立叶变化,可以直接对灰度图像进行二维傅立叶变换fft2,但是结果仍需要处理才能更容易理解和观察。

 

高斯模糊是低通滤波的一种,也就是滤波函数是高斯函数,由于理想低通滤波会带来振铃现象,所以往往采用巴特尔茨或者高斯函数作为滤波函数。

高斯滤波是指用高斯函数作为滤波函数,至于是不是模糊,要看是高斯低通还是高斯高通,低通就是模糊,高通就是锐化

 

高斯平滑滤波:

>>img=imread('e:

\image\shuiguo.jpg');

f=rgb2gray(img);彩图变成灰度图像

subplot(1,2,1);创建子图

imshow(f);并在子图中的一行一列显示灰度图f

f=double(f);把其他类型对象转换为双精度数值 

f=fft2(f);二维离散Fourier变换 

f=fftshift(f);直流分量对中的谱,,简化频谱的视觉效应,函数fftshift通过交换F的象限来操作,若a=【12;34】则fftshift(a)=【43;21】在变化计算后使用fftshift的结果与在计算变换前将输入图像乘以(-1)的x+y次方所得结果是相同的,但不可以互换!

[m,n]=size(f);size取矩阵的大小

d0=80;

m1=fix(m/2); fix向零取整 

n1=fix(n/2); fix向零取整 

fori=1:

m

forj=1:

n

d=sqrt((i-m1)^2+(j-n1)^2);

h(i,j)=exp(-d^2/2/d0^2);

end

end

g=f.*h;

g=ifftshift(g);

g=ifft2(g);

g=mat2gray(real(g));real表示复数的实部 ,ifft的输出实际上都会有很小的虚部分量,因此要提取结果的虚部

mat2gray实现图像矩阵的归一化操作。

[1]所谓"归一化"就是使矩阵的每个元素的值都在0和1之间。

该函数在数字图像处理中经常用到。

subplot(1,2,2);

imshow(g);

imwrite(img,'2.jpg');

 

Do变小··图像变得更加模糊了···原理?

 

频域处理:

计算并可视化二维DFT;

 

f=imread('e:

\image\heibai.jpg');

subplot(1,2,1);

imshow(f);

g=fft2(f);快速傅立叶变换函数fft:

F=fft2(f);使用傅立叶进行滤波时,需要对输入数据进行零填充则:

F=fft2(f,P,Q)使用所要求的0的个数对输入图像进行填充,以便结果函数的大小为p*q

g=fftshift(g);

subplot(1,2,2);

imshow(abs(g),[])

>>s=log(1+abc(g));imshow(s,[])

傅立叶频谱可以使用函数abs来获得:

s=abs(f)该函数计算数组的每一个元素的幅值(实部和虚部平方和的平方根);下面为计算他的傅立叶变换并显示其频谱:

F=fft2(f);

S=abs(F);

imshow(S,[])

不理想·因此在该例中键入:

Fc=fftshift(F);%fc为已居中的变换。

Imshow(abs(Fc),[]);%居中后的图像很明显

但是该频谱中值的动态范围与··比特显示相比要大得多因此我们使用对数变化来处理该问题:

s2=log(1+abs(fc));subplot(1,4,4);imshow(s2,[])

可视细节的增加就变得很明显了!

总体显示如下;

f=imread('e:

\image\heibai.jpg');

subplot(1,4,1);

imshow(f);

g=fft2(f);

s=abs(g);subplot(1,4,2);

imshow(s,[]);fc=fftshift(s);subplot(1,4,3);imshow(abs(fc),[]);s2=log(1+abs(fc));subplot(1,4,4);imshow(s2,[])

>>

 

im2bw()

将真彩色、索引色和灰度图像转换为二值图像。

loadtrees

BW=im2bw(X,map,0.4);

imshow(X,map),

figure,

imshow(BW)

 

ind2gray()

将索引色图像转换为灰度图像。

loadtrees

J=ind2gray(X,map);

imshow(X,map),

figure,

imshow(J)

 

ind2rgb()

将索引色图像转换为真彩色图像。

loadtrees

J=ind2rgb(X,map);

imshow(X,map),

figure,

imshow(J)

 

mat2gray()

将数据矩阵转换为灰度图像。

rgb2gray()

将真彩色图像转换为灰度图像。

rgb2ind()

将真彩色图像转换为索引色图像。

 

把彩色图像转化为灰度图像之后对图像进行直方图均衡化··(改善视觉效果)

f=imread('e:

\image\shuiguo.jpg');

g=rgb2gray(f);

h=histeq(g);

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

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

figure,

subplot(1,2,1),imhist(g);

subplot(1,2,2),imhist(h);

图像增强方法:

对数变换:

I=imread(‘pout.tif’);

imshow(I)

I=double(I)%对数运算不支持uint8类型数据

J=log(I+1);

figure,imshow(J,[4,5])

 

将彩图变成灰度图像之后,进行直方图均衡化,在把均衡化前后的图像分别做增强··

f=imread('e:

\image\lunzi.png');

g=rgb2gray(f);

h=histeq(g);

i=double(h);

l=log(i+1);

subplot(1,2,1),imshow(l,[4,5]);subplot(1,2,2),imshow(g)>>

增加噪声:

I=imread('eight.tif');

J1=imnoise(I,'gaussian',0,0.02);

%对图像数据添加均值为0,方差为0.02的高斯噪声。

J2=imnoise(I,'salt&pepper',0.02);

%对图像数据添加椒盐噪声。

J3=imnoise(I,'speckle',0.02);

%对图像数据添加乘性噪声。

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

subplot(2,2,2),imshow(J1)

subplot(2,2,3),imshow(J2)

subplot(2,2,4),imshow(J3)

 

去噪声处理:

领域平均法

h=[111;111;111];%产生滤波模板

h=h/9;%对模板归一化

J=conv2(J1,h);%多项式乘、卷积 

subplot(1,2,1),imshow(J1)

subplot(1,2,2),imshow(J2)

Conv2要求都为double或者都为single

 

去噪声处理

中值滤波:

J=medfilt2(J1);

subplot(1,2,1),imshow(J1)

subplot(1,2,2),imshow(J2)

具体输入如下:

f=imread('e:

\image\yuanquan.png');

i=imnoise(f,'gaussian',0,0.02);

i=rgb2gray(i);

J=medfilt2(i);

imshow(i),figure,imshow(J)

 

图像变换:

图像变换是图像处理的重要工具。

通过变换,改变图像的表示域,可以对图像的后继处理带来极大的方便。

例如:

傅立叶变换:

图像的频域分析

离散余弦变换:

使能量集中利于图像压缩。

 

傅立叶变换的例子:

loadimdemossaturn2

imshow(saturn2)

b=fft2(saturn2);

figure

imshow(log(abs(b)),[])

colormap(jet(64));

Colorbar

离散余弦变换(DCT):

b=dct2(saturn2);

figure

imshow(log(abs(b)),[])

colormap(jet(64));

Colorbar

matlab中,每个figure都有(而且仅有)一个colormap,翻译过来就是色图。

COLORMAP(MAP)用MAP矩阵映射当前图形的色图。

COLORMAP('default')默认的设置是JET.

MAP=COLORMAP获得当前色图矩阵.

COLORMAP(AX,...)应用色图到AX坐标对应的图形,而非当前图形

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1