数字图像代码详解.docx
- 文档编号:26498796
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:18
- 大小:23.24KB
数字图像代码详解.docx
《数字图像代码详解.docx》由会员分享,可在线阅读,更多相关《数字图像代码详解.docx(18页珍藏版)》请在冰豆网上搜索。
数字图像代码详解
function figure_rotate
% 构造原始图像
I=zeros(256,256);
I(88:
168,124:
132)=1;
% subplot(1,2,1)
imshow(I)
% 求原始图像的频谱
J=fft2(I);
F=abs(J);
J1=fftshift(F); figure
%subplot(1,2,2)
imshow(J1,[5 50]) % 灰度级低于5的显示黑色,高于50的显示白色,在[5 50]范围内的保持其灰度级不变
%imshow(J1)
% 对一副图像进行旋转
J=imrotate(I,90,'bilinear','crop');
figure
imshow(J)
% 求旋转后图像的频谱
J1=fft2(J);
F=abs(J1);
J2=fftshift(F);figure
imshow(J2,[5 50])
2015/5/7 11:
30:
04
曾曙 2015/5/7 11:
30:
04
function zhifangtu
clear all
close all
% I=imread('cameraman.tif'); %' lena.png
% I=imread('lena.jpg'); %' lena.png
I=imread('car0.jpg'); %' lena.png
I=rgb2gray(I); % 将RGB图像转换为灰度图像
imshow(I)
figure
(2)
imhist(I,64) % 显示一副图像的直方图,只能用于灰度图像
J=histeq(I); % 直方图均衡化
figure(3)
imshow(J)
figure(4)
imhist(J,64)
2015/5/7 11:
33:
07
曾曙 2015/5/7 11:
33:
07
I=rgb2gray(I); % 将RGB图像转换为灰度图像
2015/5/7 11:
48:
05
1班-黄 2015/5/7 11:
48:
05
2015/5/8 15:
42:
50
曾曙 2015/5/8 15:
42:
50
由于L2621机位有限,周四上午 3~4节(10~14周)在L2621的上机改为
周二上午 3~4节(11~14周)在L2616上。
同时周四上午 3~4节(11~14周)的理论课照常在J3216上。
请相互转告下。
曾曙 2015/5/8 15:
43:
28
由于L2621机位有限,周四上午 3~4节(10~14周)在L2621的上机改为
周二上午 3~4节(11~14周)在L2616上。
同时周四上午 3~4节(11~14周)的理论课照常在J3216上。
请相互转告下。
2015/5/8 18:
25:
16
落花雨~ 2015/5/8 18:
25:
16
2015/5/12 11:
00:
54
曾曙 2015/5/12 11:
00:
54
function lvbo
% 采用领域平均、中值滤波等方法对一副添加了噪声的图像进行滤波处理
clear all
close all
I=imread('pout.tif');
% subplot(2,2,1);imshow(I);
% xlabel('(a)原始图像');
J0=imnoise(I,'salt & pepper',0.05); %添加椒盐噪声
J=imnoise(I,'gaussian',0,0.025); %添加高斯噪声
subplot(2,2,1);imshow(J);
xlabel('(a)添加高斯噪声');
J1=filter2(fspecial('average',3),J)/255; %3*3模板均值滤波
subplot(2,2,2);imshow(J1);
xlabel('(b)3*3模板均值滤波去噪');
J2=filter2(fspecial('average',5),J)/255; %5*5模板均值滤波
subplot(2,2,3);imshow(J2);
xlabel('(c)5*5模板均值滤波去噪');
J3=filter2(fspecial('average',7),J)/255; %7*7模板均值滤波
subplot(2,2,4);imshow(J3);
xlabel('(d)7*7模板均值滤波去噪');
figure
(2)
subplot(2,2,1);imshow(J0);
xlabel('(a)添加椒盐噪声');
subplot(2,2,2);imshow(J);
xlabel('(b)添加高斯噪声');
J4=medfilt2(J0,[5,5]); % 添加椒盐噪声图像进行5×5方形窗口中值滤波
J5=medfilt2(J,[5,5]); % 添加高斯噪声图像进行5×5方形窗口中值滤波
subplot(2,2,3);imshow(J4);
xlabel('(c)椒盐噪声图像中值滤波');
subplot(2,2,4);imshow(J5);
xlabel('(d)高斯噪声图像中值滤波');
2015/5/12 11:
17:
21
曾曙 2015/5/12 11:
17:
21
注意事项:
1.注意输入法格式必须是英文格式;
2.注意很多MATLAB库函数只能针对灰度图像。
若输入为彩色图像,则必须要先用rgb2gray函数进行转化。
给图像添加噪声:
imnoise(I, type, parameters) I为输入图像,type为噪声类型,parameters为噪声参数。
例如:
J=imnoise(I,'salt & pepper',0.05); % 添加椒盐噪声
J=imnoise(I,'gaussian',0,0.025); % 添加高斯噪声
模板或滤波器生成工具:
w=fspecial(‘type’, parameters)
其中,type为滤波器类型,parameters进一步定义了相应滤波器的一些具体参数。
例如:
w4=fspecial('laplacian',0); % 工具箱提供的大小为3*3的拉普拉斯滤波器,其中心为-4。
图像滤波:
方法一,采用imfilter图像滤波函数
g=imfilter(f, w, filtering_mode, boundary_options, size_options)
其中,f为输入图像,w为模板,filtering_mode是指滤波过程是使用相关(‘corr’,默认)还是卷积(‘conv’),boundary_options是指定边界零填充方式,size_options是指输出图像尺寸是扩展还是保存和原图像一致(默认保持一致)。
例如:
imfilter(f,w4,'replicate')
方法二,采用filter2-二维数字滤波器
g=filter2(w,f)
其中,f为输入图像,w为模板。
输出结果为输入图像和模板的相关(‘corr’)。
例如:
filter2(fspecial('average',3),J)
2015/5/12 11:
27:
06
曾曙 2015/5/12 11:
27:
06
function huidutuxiang_pinhua_ruihua
% 灰度图像常用平滑、锐化滤波
close all
clear all
% 原图
I=double(imread('lena.jpg')); % 在滤波前将源图像转化为双精度类型,uint8类型的图像所有像素均为正的,滤波过程得到的负值将被截断,冈萨雷斯MTALAB p74
%I=double(I);
figure,imshow(I,[ ]) % imshow(I,[])是imshow(I,[low high])的缺省形式,将I的最小值设为low,最大值设为high.
% 对于双精度类型的图像比较有效。
另外,对于显示动态范围较小的图像或既有正值又有负值的图像非常有用。
%1.均值低通滤波
H=fspecial('average',5);
F1=double(filter2(H,I));
figure,imshow(F1,[])
%2.高斯低通滤波
H=fspecial('gaussian',7,3);
F2=double(filter2(H,I));
figure,imshow(F2,[])
%3.边缘=原图-均值低通滤波
F3=2*I-F1; % 增强图像=2倍原图-均值低通滤波
figure,imshow(uint8(F3),[]) % uint8(F3)将double类型的图像转化为8比特的无符号整数,范围为[0,255]
%4.边缘=原图-高斯低通滤波
F4=2*I-F2;
figure,imshow(uint8(F4),[])
%5.‘prewitt’算子增强边缘
H=fspecial('prewitt');
F5=uint8(I+filter2(H,I)); % 增强图像=原图+提取到的边缘
figure,imshow(F5,[])
%6.‘sobel’算子增强边缘
H=fspecial('sobel');
F6=uint8(I+filter2(H,I));
figure,imshow(F6,[])
2015/5/19 10:
37:
51
曾曙 2015/5/19 10:
37:
51
function shougonglvboqi_zengqiang
% 手工指定滤波器和增强技术比较
close all
f=imread('moon.tif');
f=im2double(f); % 在滤波前将源图像转化为双精度类型
w4=fspecial('laplacian',0); % 工具箱提供的大小为3*3的拉普拉斯滤波器,其中心为-4。
w8=[1 1 1;1 -8 1; 1 1 1]; % 手工指定滤波器,其中心为-8。
g2=imfilter(f,w4,'replicate');
g4=f-imfilter(f,w4,'replicate'); % g4=f-g2 从原图减去用拉普拉斯算子处理过的结果,以还原失去的灰度色调(因为滤波器中心系数为负数)。
g3=imfilter(f,w8,'replicate');
g8=f-imfilter(f,w8,'replicate');
imshow(f)
figure,imshow(g2)
figure,imshow(g3)
figure,imshow(g4)
figure,imshow(g8)
2015/5/19 10:
40:
17
曾曙 2015/5/19 10:
40:
17
2015/5/19 10:
42:
20
曾曙 2015/5/19 10:
42:
20
曾曙 2015/5/19 10:
44:
10
function tuxiang_fuyuan
% 对一幅图像实现运动模糊,并添加噪声。
然后,利用逆滤波、维纳滤波以及最小二乘滤波实现图像复原
clear all
close all
I=imread('lena.jpg');
subplot(2,3,1);imshow(I);
xlabel('(a)原始图像');
len=30;
Theta=75;
PSF=fspecial('motion',len,Theta);
MF=imfilter(I,PSF,'circular','conv');
noise=imnoise(zeros(size(I)),'gaussian',0,0.01); %产生高斯噪声zeros(size(I)); %
MFN=imadd(MF,im2uint8(noise)); %运动造成模糊并添加噪声
subplot(2,3,2);imshow(MFN);
xlabel('(b)运动造成模糊并添加噪声');
wnr1=deconvwnr(MFN,PSF); %逆滤波
subplot(2,3,3);imshow(wnr1);
xlabel('(c)逆滤波复原');
NSR=sum(noise(:
).^2)/sum(MFN(:
).^2);
wnr2=deconvwnr(MFN,PSF,NSR); %维纳滤波
subplot(2,3,4);imshow(deconvwnr(MFN,PSF,NSR),[]);
xlabel('(d)维纳滤波复原');
NP=0.02*prod(size(I)); % 噪声强度
[reg1 LAGRA]=deconvreg(MFN,PSF,NP/3);
subplot(2,3,5);imshow(reg1);
xlabel('(e)有噪声强度最小二乘滤波复原');
edged=edgetaper(MFN,PSF);
reg2=deconvreg(edged,PSF,[],LAGRA/300);
subplot(2,3,6);imshow(reg2);
xlabel('(f)有拉格朗日最小二乘滤波复原');
2015/5/19 11:
09:
10
曾曙 2015/5/19 11:
09:
10
function fuhebianhuan
% 将一幅图像先向左平移100像素、再缩小一倍、接着垂直镜像变换、最后旋转45度。
close all
I=imread('car0.jpg');
% I=double(rgb2gray(I));
I=double(I);
H=size(I)
B=zeros(H)+255;
B(1:
H
(1),1:
H
(2)-100,1:
H(3))=I(1:
H
(1),100+1:
H
(2),1:
H(3)); % 向左平移100像素
C=imresize(B,0.5,'nearest'); % 缩小一倍
G=size(C)
D(1:
G
(1),1:
G
(2),1:
G(3))=C(G
(1):
-1:
1,1:
G
(2),1:
G(3)); % 镜像变换
E=imrotate(D,45,'nearest'); % 旋转变换
imshow(uint8(E))
曾曙 2015/5/19 11:
11:
05
double(I) % 将图像变成双精度类型;
uint8(I) % 将图像变成8位的256灰度级的图像。
2015/5/19 11:
12:
37
曾曙 2015/5/19 11:
12:
37
B(1:
H
(1),1:
H
(2)-100,1:
H(3))=I(1:
H
(1),100+1:
H
(2),1:
H(3))
曾曙 2015/5/19 11:
13:
01
B(1:
H
(1),1:
H
(2)-100,1:
H(3))=I(1:
H
(1),100:
H
(2),1:
H(3))
曾曙 2015/5/19 11:
13:
27
?
?
?
Subscripted assignment dimension mismatch.
Error in ==> fuhebianhuan at 10
B(1:
H
(1),1:
H
(2)-100,1:
H(3))=I(1:
H
(1),100:
H
(2),1:
H(3)); % 向左平移100像素
2015/5/19 11:
14:
40
曾曙 2015/5/19 11:
14:
40
结构元素产生函数strel:
Se=strel(shape,parameters)
其中,shape是指定希望类型的字符串,而parameters是指定形状信息(如其大小)的一系列参数。
例如,strel(‘disk’,5) 将创建一个半径为5的圆盘型结构元素。
2015/5/19 11:
28:
22
曾曙 2015/5/19 11:
28:
22
function huffmanBIANMA
p=[0.1 0.18 0.4 0.05 0.06 0.1 0.07 0.04];
code=huffman(p)
曾曙 2015/5/19 11:
28:
37
code =
'0111'
'010'
'1'
'01101'
'0010'
'000'
'0011'
'01100'
曾曙 2015/5/19 11:
30:
07
function suanshubianma_main
% 算术编码主程序
clear all
format long e;
symbol=['abcd'];
ps=[0.1 0.4 0.2 0.3]; %信源各符号出现的概率
inseq=('cadacdb'); %待编码的数据序列
codeword=suanshubianma(symbol,ps,inseq) %算术编码
outseq=suanshujiema(symbol,ps,codeword,length(inseq)) %算术解码
2015/5/26 10:
10:
18
曾曙 2015/5/26 10:
10:
18
上机所用图像
2015/5/26 11:
00:
37
曾曙 2015/5/26 11:
00:
37
function zhiwentuxiangchuli
% 对二值图像(含噪声指纹图像)分别进行腐蚀、膨胀和开、闭运算操作,观察和总结各种操作的特点;
close all
I=imread('noisy_fingerprint.tif');
figure
imshow(I)
s1=strel('disk',1); % 圆形结构函数
s2=strel('square',3); % 方形结构函数
s3=ones(3,3); % 3*3的方形结构函数,与s2相同
I1=imerode(I,s1); % 腐蚀
figure
imshow(I1)
I2=imdilate(I,s1); % 膨胀
figure
imshow(I2)
I3=imopen(I,s1); % 开运算
figure
imshow(I3)
I4=imclose(I,s1); % 闭运算
figure
imshow(I4)
I5=imclose(I3,s1); % 在开运算的基础上闭运算
figure
imshow(I5)
曾曙 2015/5/26 11:
01:
55
结构元素产生方式一:
结构元素产生函数strel:
Se=strel(shape,parameters)
其中,shape是指定希望类型的字符串,而parameters是指定形状信息(如其大小)的一系列参数。
例如,strel(‘disk’,5) 将创建一个半径为5的圆盘型结构元素。
结构元素产生方式二:
直接构造矩阵
s3=ones(3,3); % 3*3的方形结构函数
2015/5/26 11:
03:
05
曾曙 2015/5/26 11:
03:
05
曾曙 2015/5/26 11:
03:
28
曾曙 2015/5/26 11:
04:
14
灰度图像转化为二值图像:
Bw=im2bw(I, 0.7) % 变为阈值取0.7的二值图像
2015/5/26 11:
06:
28
曾曙 2015/5/26 11:
06:
28
利用edge函数实现边缘检测:
G=edge(f, ’method’, parameters)
f为输入图像,method为边缘检测方法如Sobel、Roberts、Prewitt、LOG和Canny法等,parameters为该方法对应的参数。
例如,
BW5 = edge(I,'canny',0.1); % 用Canny算子进行边缘检测,判别阈值为0.1
曾曙 2015/5/26 11:
07:
46
连通分量提取与统计:
[labeled,numobjects]=bwlabel(BW,4);
2015/5/26 11:
11:
50
曾曙 2015/5/26 11:
11:
50
连通分量提取与统计:
[labeled,numobjects]=bwlabel(BW,conn);
其中,BW是一副输入二值图像,conn用于指定期望的连接(不是4就是8)。
Labeled为标记矩阵,numobjects为所给出的连接分量总数。
2015/5/26 11:
25:
02
曾曙 2015/5/26 11:
25:
02
function shanfengtuxiangquzao
% 对一幅灰度图像(图4)分别进行腐蚀、膨胀和开、闭运算操作
close all
I=imread('shanfeng.jpg');
figure
imshow(I)
s1=strel('disk',3); % 圆形结构函数
s2=strel('square',3); % 方形结构函数
s3=ones(size(3,3)); % 3*3的方形结构函数,与s2相同
I1=imerode(I,s1); % 腐蚀
figure
imshow(I1)
I2=imdilate(I,s1); % 膨胀
figure
imshow(I2)
I3=imopen(I,s1); % 开运算
figure
imshow(I3)
I4=imclose(I,s1); % 闭运算
figure
imshow(I4)
I5=imclose(I3,s1); % 在开运算的基础上闭运算
figure
imshow(I5)
曾曙 2015/5/26 11:
25:
12
题目二程序
2015/5/26 11:
25:
40
曾曙 2015/5/26 11:
25:
40
function bianjietiqu
% 用于提取图像边界
I1=imread('renlian.jpg');
figure
(1)
subplot(1,2,1),imshow(I1)
s=strel('disk',3); % 定义结构元素
I2=imerode(I1,s); % 腐蚀
I3=I1-I2;
subplot(1,2,2),imshow(I3)
题目三程序
曾曙 2015/5/26 11:
27:
36
注意:
QQ截图后得到的是rgb类型的图像,对于有些MATLAB函数,必须先将rgb图像转化为灰度图像才能使用,转化函数rgb2gray.
2015/5/26 11:
32:
48
曾曙 2015/5/26 11:
32:
48
function bianyuanjiance
% 对图6分别采用Sobel算子、Roberts算子、Prewitt算子、LOG算子和Canny算子进行边缘检测,同屏显示和对比各检测结果,并对结果进
% 行分析总结
clear all
close all
%I=imread('tire.tif'); % feiji.jpg
I=imread('feiji.jpg'); % feiji.jpg
subplot(2,3,1),imshow(I)
BW1 = edge(I,'sobel',0.1); % 用Sobel算子进行边缘检测,判别阈值为0.1
subplot(2,3,2),imshow(BW1)
BW2 = edge(I,'roberts',0.18); %用Roberts算子进行边缘检测,判别阈值为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 代码 详解