数字图像处理基本操作.docx

上传人:b****1 文档编号:10340352 上传时间:2023-05-25 格式:DOCX 页数:24 大小:203.66KB
下载 相关 举报
数字图像处理基本操作.docx_第1页
第1页 / 共24页
数字图像处理基本操作.docx_第2页
第2页 / 共24页
数字图像处理基本操作.docx_第3页
第3页 / 共24页
数字图像处理基本操作.docx_第4页
第4页 / 共24页
数字图像处理基本操作.docx_第5页
第5页 / 共24页
数字图像处理基本操作.docx_第6页
第6页 / 共24页
数字图像处理基本操作.docx_第7页
第7页 / 共24页
数字图像处理基本操作.docx_第8页
第8页 / 共24页
数字图像处理基本操作.docx_第9页
第9页 / 共24页
数字图像处理基本操作.docx_第10页
第10页 / 共24页
数字图像处理基本操作.docx_第11页
第11页 / 共24页
数字图像处理基本操作.docx_第12页
第12页 / 共24页
数字图像处理基本操作.docx_第13页
第13页 / 共24页
数字图像处理基本操作.docx_第14页
第14页 / 共24页
数字图像处理基本操作.docx_第15页
第15页 / 共24页
数字图像处理基本操作.docx_第16页
第16页 / 共24页
数字图像处理基本操作.docx_第17页
第17页 / 共24页
数字图像处理基本操作.docx_第18页
第18页 / 共24页
数字图像处理基本操作.docx_第19页
第19页 / 共24页
数字图像处理基本操作.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字图像处理基本操作.docx

《数字图像处理基本操作.docx》由会员分享,可在线阅读,更多相关《数字图像处理基本操作.docx(24页珍藏版)》请在冰点文库上搜索。

数字图像处理基本操作.docx

数字图像处理基本操作

Matlab图像的读取和存储

图像的读取

l=imread(‘pout.tif');

imread是读取图像的函数。

pout.tif是matlab内置的图像,不管在什么程序内都可以直接读

取。

这里我们来说几种常见的情形

注:

Matlab文件夹内有test.m,1.jpg,image文件夹,同时image文件夹内有2.jpg

读取1.jpg

I=imread(‘1.jpg');

读取2.jpg

I=imread(‘imag^pg')相对寸路径的读取

读取D:

\1023\25\1.jpg

I=imread(‘D:

1.jpg'绝寸路径的读取

读取D:

\1023\25内20个图像。

fori=1:

20

I=imread([‘D:

',num2str(i),'.jpg']);

end

图像的显示

关于这三个函数用法的区别,主要的意思是:

imshow显示按照原来的比例,而image会改

变原来图像的比例。

imtool,很少用到。

一般用imshow就足够了。

那么什么时候用figure呢?

当程序中只显示一幅图像时,直接imshow就可以。

然后当图像

多的时候,就需要用到figuure;imshow(l1);figure;imshow(l2);figure;imshow(l3)

如果想要在一张图片内,显示好几个图怎么办呢?

title显示在图像的上方,起到提示的作

用。

l=imread('pout.tif);

subplot(221);imshow(I);title('1');

subplot(222);imshow(l);title

(2);

subplot(223);imshow(l);title(3);

subplot(224);imshow(l);title('4');

其中前面的22代表是2*2的分布,也可以是2*3,3*4等。

按照行来排列,从第一行开始分别为1234。

如图所示。

 

3

如果没有要求的话,直接用figure。

此时希望图2来显示某个图像,那么figure

(2),就指

定来显示某个图像。

当然了,如果仅有一个图像显示这样做,那么可能会被覆盖掉,因此,一个程序中的用法一定要统一,并且保证后面的,不要把前面的覆盖掉。

图像的存储

imwrite(l,'pout1.jpg');

同样,imwrite也有相对路径和绝对路径的存储,以及连续的存储方法。

同imread

imwrite(l,'pout1.jpg');

imwrite(l,'imagepout1.jpg');

imwrite(l,'D:

pout1.jpg');

imwrite(l,['image',num2str(i),'.jpg']);%i是变量,需要定义

这里的.jpg可以改成.bmp等,想要的格式。

需要注明的是,存储所选择的文件夹,需要已经建立好。

自动建立文件夹需要用mkdir函数。

mkdir(‘D:

1')%绝对路径的建立。

mkdir(‘1');%绝对路径文件夹的建立。

创建之后,在Matlab文件夹内。

这样就能够节省很多的人力。

当文件比较多的情况下,人工去建立的话,还容易出错。

代码:

l=imread('pout.tif);

figure;

subplot(221);imshow(l);title('1');

subplot(222);imshow(l);title('2');

subplot(223);imshow(l);title(3);

subplot(224);imshow(l);title('4');

whos;

mkdir('image')

imwrite(l,'image\pout2.jpg');

Matlab图像的叠加

将两幅图像比率叠加

源函数

function[imout]=ImageAdd(ima,imb,x,y,rate)

%UNTITLED此处显示有关此函数的摘要

%此处显示详细说明

[m,n,g]=size(ima);

[a,b,g1]=size(imb);

ima=im2double(ima);

imb=im2double(imb);

imout=zeros(m,n,g);

fori=1:

m

forj=1:

n

if(i<=a&&i>=x&&j>=y&&j<=b)

imout(i,j,:

)=((ima(i,j,:

)*(100-rate)+imb(i-x+1,j-y+1,:

)*rate))/100;

else

imout(i,j,:

)=ima(i,j,:

);

end

ilTf件¥1

Matlab图像颜色空间转换

程序

clear

rgb=imread('G:

\Learning\MultiMedia\666.jpg');

rgb2hsi(rgb);

rgb_r=rgb(:

:

1);

rgb_g=rgb(:

:

2);

rgb_b=rgb(:

:

3);

[n,m]=size(rgb);

zero=zeros(n,m/3);

Y=0.229*rgb_r+0.587*rgb_g+0.114*rgb_b;

U=-0.147*rgb_r-0.289*rgb_g+0.436*rgb_b;

V=0.615*rgb_r-0.515*rgb_g-0.100*rgb_b;

I=0.596*rgb_r-0.275*rgb_g-0.321*rgb_b;

Q=0.212*rgb_r-0.523*rgb_g+0.311*rgb_b;

Cr=0.5*rgb_r-0.4187*rgb_g-0.0813*rgb_b+128;

Cb=-0.1687*rgb_r-0.3313*rgb_g+0.5*rgb_b+128;

I=(rgb_r+rgb_g+rgb_b)/3;

R=cat(3,Y,zero,zero);

G=cat(3,zero,U,zero);

B=cat(3,zero,zero,V);

RGB=cat(3,Y,Cr,Cb);%通过修改参数的值可以显示各种颜色空间的效果

imshow(RGB);

subplot(2,2,1),imshow(R),title('红色分量');

subplot(2,2,2),imshow(G),title('绿色分量');

subplot(2,2,3),imshow(B),title('蓝色分量');subplot(2,2,4),imshow(RGB);

HIS:

functionhsi=rgb2hsi(rgb)

%提取单通道分量rgb=im2double(rgb);

r=rgb(:

:

1);

g=rgb(:

:

2);

b=rgb(:

:

3);%实现转换num=0.5*((r-g)+(r-b));

den=sqrt((r-g).A2+(r-b).*(g-b));

theta=acos(num./(den+eps));

H=theta;

H(b>g)=2*pi-H(b>g);

H=H/(2*pi);

num=min(min(r,g),b);

den=r+g+b;

den(den==0)=eps;

S=1-3.*num./den;

H(S==0)=0;

I=(r+g+b)/3;

hsi=cat(3,H,S,I);imshow(hsi);

CMY:

functionhsi=rgb2CMY(rgb)rgb=im2double(rgb);

r=rgb(:

:

1);

g=rgb(:

:

2);

b=rgb(:

:

3);

C=1-r;

M=1-g;

Y=1-b;

CMY=cat(3,C,M,Y);imshow(CMY);

实验内容:

读入彩色图像,提取其中的R、G、B颜色分量,并展示出来。

我们学习了多种表示图像的颜色空间,请编写程序将图像转换到YUV、YIQ、YCrCb、HIS、

CMY等颜色空间,并展示出来。

颜色空间的转化关系参考以下公式:

原始图片

三个色调分量

 

 

I=0.596R

Q=0.212R

YUV与RGB之间的转换

Y=0.229R+0.587G+0.114B

U=-0.147R—0.289G+0.436B

V=0.615R—0.515G—0.100B

YIQ与RGB之间的转换

Y=0.299R+0.587G+0.114B

—0.275G—0.321B

—0.523G+0.311B

YCrCb与RGB之间的转换

Y=0.2990R+0.5870G+0.1140B

Cr=0.5000R-0.4187G-0.0813B+128

Cb=-0.1687R-0.3313G+0.5000B+12

HSI与RGB之间的转换

1=(R+G+B)/3

H=arccos{0.5*((R-G)+(R-B))/((R-G)A2+(R-B)(G-B))9.5}

S=1-[min(R,G,B)/I]

图像DCT变换(包含三种滤波器的平滑和锐化效果比较)

代码

globalgmainData;

[fname,pname]=uigetfile('*.jpg','打开文件');

iffname==0

return;

end

[Data,map]=imread(fname);%读取图像数据

%new=rgb2gray(Data);

%imwrite(new,'new.bmp','bmp')

%Data=im2bw(Data,map,0.6);%im2bw转为二进制阈值0.6

%Data=+Data;%逻辑格式转为浮点格式

Data=rgb2gray(Data);

subplot(1,2,1);%准备显示两幅图像

imshow(Data);

functionDCTcode;

globalData;%全局变量,用于共享图像数据

[m,n]=size(Data);

fid=fopen('dct.bin','w+');%创建dct.bin用存储DCT和BTC混合编码后

的二进制文件。

%补0使尺寸为4的整数倍以便分块

m仁4*ceil(m/4);n1=4*ceil(n/4);

Datatemp=zeros(m1,n1);

Datatemp(1:

m,1:

n)=Data;

%

fwrite(fid,m1,'long');fwrite(fid,n1,'long');%在文件中记录图像大小

block=zeros(4,4);%4X4大小的子带

forj=1:

4:

n

fori=1:

4:

m

fort=0:

1:

3

forp=0:

1:

3

block(1+t,1+p)=Datatemp(i+t,j+p);%取出4X4数据块

end

end

%对变换后数据进编码后存储或发送,只取其中的2X2数据DctBlock=dct2(block);

%存储(发送)编码文件

fwrite(fid,DctBlock(1,1),'bit12');%直流分量,用12bit量化fwrite(fid,DctBlock(1,2),'bit9');%用9bit量化非直流分量fwrite(fid,DctBlock(2,1),'bit9');

fwrite(fid,DctBlock(2,2),'bit9');

end

end

fclose(fid);

functionIDctcode;

用于存

fid=fopen('dct.bin','r');m=fread(fid,1,'long');n=fread(fid,1,'long');data=zeros(m,n);%放图像数据temp=zeros(4,4);

block=zeros(4,4);

%读取方块数据

forj=1:

4:

n

fori=1:

4:

m

block(1,1)=fread(fid,1,'bit12');

block(1,2)=fread(fid,1,'bit9');

block(2,1)=fread(fid,1,'bit9');

block(2,2)=fread(fid,1,'bit9');

temp=idct2(block);

fort=0:

1:

3

forp=0:

1:

3

Data(i+t,j+p)=temp(1+t,1+p);

end

end

end

end

data=uint8(Data);

subplot(1,2,2);

imshow(data);%显示图像

fclose(fid);

图像的傅立叶变换

读入一幅图像;对图像做FFT。

使用’subplot'命令,同时显示原始图像

其频谱图;

代码及图像

l=imread('f:

\lena.jpg');%读入图像

F=fft2(im2double(l));%FFT

F=fftshift(F);%FFT频谱平移

F=real(F);

T=log(F+1);%频谱对数变换subplot(1,2,1),imshow(l),title('原始图像');

subplot(1,2,2),imshow(T,[]),title('原始图像其频谱图')

原皓團煤原始團擁苴频诺團

读入一幅图像,分别为图像添加椒盐、高斯噪声,做FFT变换。

使

用’subplot'命令,将原始图像、原始图像频谱图、添加噪声后的图像,以及噪声图像的频谱图同时显示出来。

得到原始图像的频谱图的方法同上,然后对原图像模拟叠加密度为

0.04的椒盐噪声,然后添加模拟均值为0方差为0.02的高斯噪声,然

后得到噪声图像的频谱图,方法同上,最后显示所有图像。

2.2代码及图像

l=imread('f:

\lena.jpg');%读入图像

F=fft2(im2double(l));%FFT

F=fftshift(F);%FFT频谱平移

F=real(F);

T=log(F+1);%频谱对数变换

subplot(3,2,1),imshow(l),title('原始图像');

subplot(3,2,2),imshow(T,[]),title('原始图像其频谱图’);

S=imnoise(l,'salt&pepper',0.04);%模拟叠加密度为0.04的椒盐噪声

K=fft2(im2double(S));%FFT

K=fftshift(K);%FFT频谱平移

K=real(K);

T=log(K+1);%频谱对数变换

subplot(3,2,3),imshow(S),title('添加椒盐噪声后的图像');subplot(3,2,4),imshow(T,[]),title('椒盐噪声频谱图');

G=imnoise(l,'gaussian',0,0.02);%模拟均值为0方差为0.02的高斯噪

声,

H=fft2(im2double(G));%FFT

H=fftshift(H);%FFT频谱平移

H=real(H);

T=log(H+1);%频谱对数变换

subplot(3,2,5),imshow(G),title('添加高斯噪声后的图像');subplot(3,2,6),imshow(T,[]),title('高斯噪声频谱图')

JS始團像武頻谱團

 

椒盐噪声频谱團

离斯噪声频谱團

逓加槻盐噪声后的團像

漳加高斯噪声后的團像

读入一幅图像,对图像分别进行高斯低通、巴特沃兹低通、高斯高通和巴特沃兹高通频域滤波,比较其锐化和平滑效果;

3.1实验过程

对于高斯低通频域滤波,首先求原图像的频谱图,然后根据二维高斯低通滤波器(GLPF)定

义,对频谱图做高斯低通滤波,使低频通过而使高频衰减,最后做快速傅里叶逆变换,结果

发现滤波后的图像变模糊,比原始图像减少尖锐的细节部分而突出平滑过渡部分;对于巴特

沃兹低通频域滤波,然后根据二级巴特沃思低通滤波器(BLPF)定义,对频谱图做巴特沃兹

低通滤波,使低频通过而使高频衰减,最后做快速傅里叶逆变换,结果发现滤波后的图像变

经对比图像后发现,经过巴特

模糊,比原始图像减少尖锐的细节部分而突出平滑过渡部分;沃思低通滤波的图像比经过高斯低通频域滤波的图像更平滑。

对于高斯高通频域滤波,首先求原图像的频谱图,然后根据截频距原点为D0的高斯高通滤波器(GHPF)定义,对频谱图做高斯高通滤波,使高频通过而使低频衰减,最后做快速傅里叶逆变换,结果发现滤波后的图像变锐化,比原始图像减少平滑过渡而突出边缘等细节部分;对于巴特沃兹高通频域滤波,然后根据二阶且截至频率距原点的距离为D0的巴特沃思高通滤波器(BHPF)定义,对频谱图做巴特沃兹高通滤波,使高频通过而使低频衰减,最后做快速傅里叶逆变换,结果发现滤波后的图像变锐化,比原始图像减少平滑过渡而突出边缘等细节部分;经对比图像后发现,经过高斯低通滤波的图像比经过高斯低通巴特沃思低通频域滤波的图像更平滑。

3.2代码及图像

%高斯低通频域滤波

I=imread('f:

\lena.jpg');

subplot(1,2,1),imshow(I),title('原始图像');

I=double(I);

S=fftshift(fft2(I));

[M,N]=size(S);

n=2;

d0=30;%GLPF滤波,d0=5,15,30(程序中以d0=30为例)

n1=floor(M/2);

n2=floor(N/2);

fori=1:

M

forj=1:

N

d=sqrt((i-门1)人2+。

-n2)^2);

h=1*exp(-1/2*(dA2/d0A2));

S(i,j)=h*S(i,j);

end

end

S=ifftshift(S);

S=uint8(real(ifft2(S)));

subplot(1,2,2),imshow(S),title('高斯低通滤波图像');

%巴特沃斯低通频域滤波

I=imread('f:

\lena.jpg');

subplot(1,2,1),imshow(I),title('原始图像

F=double(I);

%数据类型转换,MATLAB不支持图像的无符号整型的计算

G=fft2(F);

%傅立叶变换

G=fftshift(G);

%转换数据矩阵

 

[M,N]=size(G);

nn=2;

%二阶巴特沃斯(Butterworth)低通滤波器

d0=30;

%截止频率为30

m=fix(M/2);n=fix(N/2);

fori=1:

M

forj=1:

N

d=sqrt((i-m)A2+(j-n)A2);

h=1心+0.414*(d/d0)A(2*nn));%计算低通滤波器传递函数

result(i,j)=h*G(i,j);

end

end

result=ifftshift(result);

Y2=ifft2(result);

Y3=uint8(real(Y2));

subplot(1,2,2),imshow(Y3),title('巴特沃斯低通滤波')

%巴特沃斯高通频域滤波

I=imread('f:

\test.jpg');

subplot(121),imshow(I);title('原始图像');

F=double(I);%数据类型转换,MATLAB不支持图像的无符号整型的计算

G=fft2(F);%傅立叶变换

G=fftshift(G);%转换数据矩阵

[M,N]=size(G);

nn=2;%二阶巴特沃斯(Butterworth)高通滤波器

d0=30;

m=fix(M/2);n=fix(N/2);

fori=1:

M

forj=1:

N

d=sqrt((i-m)A2+(j-n)A2);

if(d==0)

h=0;

else

h=1/(1+0.414*(d0/d)A(2*nn));%计算传递函数

end

result(i,j)=h*G(i,j);

end

end

result=ifftshift(result);

J2=ifft2(result);

J3=uint8(real(J2));

subplot(122),imshow(J3);title('巴特沃斯高通滤波后图像');%滤波后图像显示

原始團煤巴特沃斯低迪址液

 

 

巴特沃断高逋滤滅后團像

原始图煨

高昕高通追漱后團像

…d蠢■

..a

1

mmsa

atiaaaaa

9sijdA

 

clearall;

MATLAB写的图像处理,直方图,灰度拉伸,均衡化代码

%绘制直方图

girl=imread('girl.bmp');

figure

(1);

%测量图像尺寸参数

subplot(3,3,1);imshow(girl);title('原图');[m,n]=size(girl);

计算每级灰度出现的概率,将其

fork=0:

255

GreyHist(k+1)=length(find(girl==k))/(m*n);%

存入GreyHist中相应位置endsubplot(2,2,2);

bar(0:

255,GreyHist)%绘制直方图title('girl的直方图')xlabel('灰度值')ylabel('出现概率')

%灰度拉伸

figure

(2);

girlgrey=girl;

prompt={'请输入系数a','请输入系数b'};

words='请输入线性拉伸函数:

';

answer=inputdlg(prompt,words,1,{'0.5','2'});

a=str2double(answer

(1));

b=str2double(answer

(2));

fori=1:

m

forj=1:

ngirl(i,j)=a*girl(i,j)+b;

endend

subplot(3,3,1);imshow(girl);title('灰度拉伸');

GreyHist=zeros(1,256);%预创建存放灰度出现概率的向量

fork=0:

255

GreyHist(k+1)=length(find(girl==k))/(m*n);%计算每级灰度出现的概率,将其

存入GreyHist中相应位置

end

subplot(2,2,2);

bar(0:

2

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2