基于Matlab基本图像处理程序.docx
- 文档编号:12531517
- 上传时间:2023-04-20
- 格式:DOCX
- 页数:11
- 大小:18.58KB
基于Matlab基本图像处理程序.docx
《基于Matlab基本图像处理程序.docx》由会员分享,可在线阅读,更多相关《基于Matlab基本图像处理程序.docx(11页珍藏版)》请在冰豆网上搜索。
基于Matlab基本图像处理程序
图像读入
●从图形文件中读入图像imread
Syntax:
A=imread(filename,fmt)
filename:
指定的灰度或彩色图像文件的完整路径和文件名。
fmt:
指定图形文件的格式所对应的标准扩展名。
如果imread没有找到filename所制定的文件,会尝试查找一个名为filename.fmt的文件。
A:
包含图像矩阵的矩阵。
对于灰度图像,它是一个M行N列的矩阵。
如果文件包含RGB真彩图像,则是m*n*3的矩阵。
●对于索引图像,格式[X,map]=imread(filename,fmt)
X:
图像数据矩阵。
MAP:
颜色索引表
图像的显示
●imshow函数:
显示工作区或图像文件中的图像
●Syntax:
imshow(I)%I是要现实的灰度图像矩阵
imshow(I,[lowhigh],param1,val1,param2,val2,...)%I是要现实的灰度图像矩阵,指定要显示的灰度范围,后面的参数指定显示图像的特定参数
imshow(RGB)
imshow(BW)
imshow(X,map)%map颜色索引表
imshow(filename)
himage=imshow(...)
●操作:
读取并显示图像
I=imread('C:
\Users\fanjinfei\Desktop\baby.bmp');%读取图像数据
imshow(I);%显示原图像
图像增强
一.图像的全局描述
直方图(Histogram):
是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。
图像直方图(ImageHistogram):
是表示数字图像中亮度分布的直方图,用来描述图象灰度值,标绘了图像中每个亮度值的像素数。
灰度直方图:
是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。
描述了一幅图像的灰度级统计信息。
是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率。
归一化直方图:
直接反应不同灰度级出现的比率。
纵坐标表示具有各个灰度级别的像素在图像中出现的概率。
图像的灰度直方图:
是一个离散函数,表示图像每一灰度级与该灰度级出现概率的对应关系。
图像的灰度直方图运算:
imhist()函数,其横坐标表示像素的灰度级别,纵坐标为像素点的个数。
●Imhist函数=Displayhistogramofimagedata显示灰度直方图的函数
●Syntax:
1 imhist(I)%I为要计算的灰度直方图图像
2 imhist(I,n)%n指定的灰度级的数目,表示所有灰度级均匀分布在n个小区间内。
3 imhist(X,map)
4 [counts,x]=imhist(...)%counts直方图数据向量。
counts(i)第i个灰度区间中的像素数目。
x是保存了对应的灰度小区间的向量。
注意:
若调用时不接受这个函数的返回值,则直接显示直方图;在得这些返回数据之后,也可以使用stem(x,counts)手绘直方图。
●例1:
显示某一图像的灰度直方图
I=imread('C:
\Users\fanjinfei\Desktop\baby.bmp');%读入图像
imhist(I)%显示图像的灰度直方图
●例2:
显示原图像和图像的灰度直方图
I=imread('C:
\Users\fanjinfei\Desktop\baby.bmp');%读入图像
figure;
imshow(I);%显示原始图像
title('source');
figure;
imhist(I);%显示图像的灰度直方图
title('graph');
注意:
这里显示的是未经归一化的灰度直方图,纵轴表示图像中所有像素取到某一特定灰度值的次数,横轴表示所有灰度值。
●例3:
归一化直方图
I=imread('C:
\Users\fanjinfei\Desktop\baby.bmp');%读入原图像
figure;%打开新窗口
[M,N]=size(I);%计算图像大小
[counts,x]=imhist(I,32);%计算有32个小区间的灰度直方图
counts=counts/M/N;%计算归一化灰度直方图各区间的值
stem(x,counts)%绘制归一化直方图
注意:
counts保存了落入每个区间的像素个数.
图像归一化:
就是将图像转换成唯一的标准形式,消除同类图像不同变形体之间的外观差异。
二.直方图均衡化
目的:
通过某种灰度映射,使输入图像转换为在每个灰度级上都具有近似相同的像素点数的输出图像。
(输出的直方图均匀)
结果:
使图像具有较高的对比度和较大的动态范围。
●Histeq函数:
Enhancecontrastusinghistogramequalization直方图均衡化
●Syntax:
[J,T]=histeq(I)%I是原始图像;J是直方均衡化的输出图像,T是变换矩阵
●例:
利用直方图均衡化来实现图像的灰度归一化。
Matlab的实现:
I=imread('C:
\Users\fanjinfei\Desktop\baby.bmp');%读入图像
I=im2double(I);
%对比度变大的图像
I1=2*I-55/255;
subplot(4,4,1);
imshow=(I1);
subplot(4,4,2);
imhist=(I1);
subplot(4,4,3);
imshow=(histeq(I1));
subplot(4,4,4);
imhist=(histeq(I1));
一.滤波操作:
【相关函数imfilter和fspecial】
1.函数imfilter:
完成滤波操作。
●函数原型:
g=imfilter(f,w,option1,option2,.....)
●参数:
f:
进行滤波操作的图像;
w:
滤波操作使用的模版,为一个二维数组;
option1,option2,...:
可选项。
返回值:
g为滤波后输出的图像。
【其中可选项:
1 边界选项:
采用固定值填充虚拟边界,会使边缘附近产生梯度
‘replicate’:
填充虚拟边界的内容总是重复与它最近的边缘像素。
2 尺寸选项:
由于滤波中填充了边界,有必要指定输出图像g的大小。
3 模式选项:
滤波过程是相关还是卷积。
‘corr’:
相关
‘conv’:
卷积】
●线性滤波过程
f=imread('C:
\Users\fanjinfei\Desktop\baby.bmp');%读入图像
figure;
imshow(f);
w=[111;111;111;111]/9
g=imfilter(f,w,'corr','replicate');%l滤波
figure;
figure,imshow(g);
2.函数fspecial:
为我们创建一些预定义的2维滤波器,直接供函数imfilter使用。
●调用格式:
h=fspecial(type,parameters)
●参数:
type:
指定滤波器类型。
如’average’:
平均模版
parameters:
可选项。
返回值:
h为特定滤波器。
●举例:
1.h=fspecial(‘average’,hsize)%返回一个大小为hsize的平均模板滤波器。
2.h=fspecial(‘disk’,radius)%返回一个大小为半径为radius的圆形平均模板。
3.h=fspecial(‘gaussian’,hsize,sigma)%返回一个大小为hsize,标准差sigma的高斯低通滤波器。
4.h=fspecial(‘sobel’)%返回一个加强水平边缘竖直梯度算子。
subplot=Createaxesintiledpositions建立坐标轴
Syntax:
subplot(m,n,p)
im2double=Convertimagetodoubleprecision将图像转换成双精度
Syntax:
I2=im2double(I)
RGB2=im2double(RGB)
I=im2double(BW)
X2=im2double(X,'indexed')
注意:
I=imread('C:
\Users\fanjinfei\Desktop\picture.png');%读取图像数据
n=length(I);
figure;
imshow('I');%显示原图像
%产生噪声图像
theta_noise=15;%噪声方差(可设为其他值)-------------------------------------------
%noise_sig_truth=20;%sigma_nusedinthepaper.Thisparameterisadjustedbytheuser.
noise_mu=0;
noise=randn(size(I)).*theta_noise+noise_mu;
Inoise=double(I)+noise;
figure;
imshow(Inoise,[]);%显示带噪图像
%小波滤波器选择这个是调用滤波器函数,但是仿真出错
qmf=MakeONFilter('Daubechies',8);%Daubechies8小波(可设为其他小波)-----------------
L=5;%分解层数=log2(n)-L
[InoiseNorm,coef]=NormNoise2(Inoise,qmf);%归一化,这个一直出现问题是怎么回事?
wc=FWT2_PO(InoiseNorm,L,qmf);%这个也没有
%--------------------------VisuShrink方法-----------------------------------------
%wc=MultiVisu2(wc,L);
%---------------------------------------------------------------------------------
%--------------------------SUREShrink方法-----------------------------------------
wc=MultiSURE2(wc,L);
图像去噪
canny边缘检测
I=imread('lena.bmp');%读灰度图lena.bmp
%Cannyedgedetector
th=[0.050.2];
E=edge(I,'canny',th);
E=uint8(255*(1-double(E)));
figure('name','canny'),imshow(uint8(E),'truesize');
sobel边缘检测
I=imread('lena.bmp');%读灰度图lena.bmp
%sobeledgedetector
E=edge(I,'sobel',0.08);
E=uint8(255*(1-double(E)));
figure('name','canny'),imshow(uint8(E),'truesize');
练习:
%读取原始图像
I=imread('C:
\Users\fanjinfei\Desktop\picture.png');%读取图像数据
n=length(I);
figure;
imshow(I),title('原图')%显示原图像
%缩小图像
J=imresize(I,0.5);%将图像缩小至0.5倍
figure;
imshow(J),title('0.5倍图')%显示缩小后的图像
%显示尺寸
[mrows,mcols]=size(I)%查看原始的尺寸大小
[mrows,mcols]=size(J)%查看缩放图像的尺寸大小
%放大图像
K=imresize(I,1.5);%将图像放大1.5倍
figure;
imshow(K),title('1.5倍图')%显示放大后的图像
%设置尺寸
M=imresize(I,[250,600]);%设置图像的尺寸大小
figure;
imshow(M),title('250*600图')
%逆时针旋转图像
I45=imrotate(I,45);%对图像逆时针旋转45度
figure;
imshow(I45),title('逆时针45度')%显示逆时针旋转后的图像
%逆时针旋转图像
I45=imrotate(I,-45);
figure;
imshow(I45),title('顺时针45度')
%对图像逆时针旋转180度,即反转
IR=imrotate(i,180);
figure;
imshow(iR),title('反转')
%裁剪图像,读入图像文件,然后调用命令,进入裁剪阶段。
【没完成】
I=imread('C:
\Users\fanjinfei\Desktop\picture.png');%读取图像数据
n=length(I);
figure;
imshow(I),title('原图')%显示原图像
I_crop=imcrop(I)%会显示进入裁剪界面
Imshow(I_crop),title('裁剪后')%显示裁剪的图像
图像的灰度变换
I=imread('C:
\Users\fanjinfei\Desktop\picture.png');%读取图像数据
figure;
imshow(I),title('原图')%显示原图像
imhist(I)
图像去雾
closeall
clc
rgb=imread('imageprocessing\fog\fog.jpg');
%对饱和度与亮度进行histeq处理
hsv=rgb2hsv(rgb);
h=hsv(:
:
1);
s=hsv(:
:
2);
v=hsv(:
:
3);
S=histeq(s);
V=histeq(v);
result_hsv=hsv2rgb(h,S,V);
%对RGB每个通道进行histeq处理
r=rgb(:
:
1);
g=rgb(:
:
2);
b=rgb(:
:
3);
R=histeq(r);
G=histeq(g);
B=histeq(b);
result_rgb=cat(3,R,G,B);
%对YCbCr的亮度进行histeq处理
ycbcr=rgb2ycbcr(rgb);
y=ycbcr(:
:
1);
cb=ycbcr(:
:
2);
cr=ycbcr(:
:
3);
Y=histeq(y);
result_ycbcr=ycbcr2rgb(cat(3,Y,cb,cr));
%结果显示
figure
subplot(2,2,1),imshow(rgb),title('原始图像')
subplot(2,2,2),imshow(result_hsv),title('HSV')
subplot(2,2,3),imshow(result_rgb),title('RGB')
subplot(2,2,4),imshow(result_ycbcr),title('YCbCr')
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Matlab 基本 图像 处理 程序