当前位置:文档之家› 基于Matlab基本图像处理程序

基于Matlab基本图像处理程序

基于Matlab基本图像处理程序————————————————————————————————作者:————————————————————————————————日期:ﻩ图像读入●从图形文件中读入图像imreadSyntax:A = imread(, fmt):指定的灰度或彩色图像文件的完整路径和文件名。

fmt:指定图形文件的格式所对应的标准扩展名。

如果imread没有找到所制定的文件,会尝试查找一个名为的文件。

A:包含图像矩阵的矩阵。

对于灰度图像,它是一个M行N列的矩阵。

如果文件包含RGB 真彩图像,则是m*n*3的矩阵。

●对于索引图像,格式[X, map]=imread(, fmt)X:图像数据矩阵。

MAP:颜色索引表图像的显示●imshow函数:显示工作区或图像文件中的图像●Syntax:imshow(I) %I是要现实的灰度图像矩阵imshow(I,[low high],param1,val1, param2, val2,...) %I是要现实的灰度图像矩阵,指定要显示的灰度范围,后面的参数指定显示图像的特定参数imshow(RGB)imshow(BW)imshow(X,map) %map颜色索引表imshow()himage=imshow(...)●操作:读取并显示图像I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读取图像数据imshow(I);%显示原图像图像增强一.图像的全局描述直方图(Histogram):是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。

图像直方图(Image Histogram):是表示数字图像中亮度分布的直方图,用来描述图象灰度值,标绘了图像中每个亮度值的像素数。

灰度直方图:是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。

描述了一幅图像的灰度级统计信息。

是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率。

归一化直方图:直接反应不同灰度级出现的比率。

纵坐标表示具有各个灰度级别的像素在图像中出现的概率。

图像的灰度直方图:是一个离散函数,表示图像每一灰度级与该灰度级出现概率的对应关系。

图像的灰度直方图运算: imhist()函数,其横坐标表示像素的灰度级别,纵坐标为像素点的个数。

●Imhist函数=Display histogramof image data显示灰度直方图的函数●Syntax:①imhist(I) % I为要计算的灰度直方图图像②imhist(I, n) %n指定的灰度级的数目,表示所有灰度级均匀分布在n个小区间内。

③imhist(X, map)④[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函数:Enhance contrastusing histogramequalization直方图均衡化●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为滤波后输出的图像。

【其中可选项:①边界选项:采用固定值填充虚拟边界,会使边缘附近产生梯度‘replicate’:填充虚拟边界的内容总是重复与它最近的边缘像素。

②尺寸选项:由于滤波中填充了边界,有必要指定输出图像g的大小。

③模式选项:滤波过程是相关还是卷积。

‘corr’:相关‘conv’:卷积】●线性滤波过程f=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读入图像figure;imshow(f);w=[1 1 1;111;111;1 1 1]/9g=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=Create axesintiledpositions建立坐标轴Syntax:subplot(m,n,p)im2double=Convertimage todouble precision将图像转换成双精度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_n used in the paper. Thisparameter is adjusted by theuser.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%Canny edge detectorth=[0.05 0.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 %sobel edge detectorE=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('反转')%裁剪图像,读入图像文件,然后调用命令,进入裁剪阶段。

相关主题