① 急求用Matlab读取个图片然后对图片的相色进行分析,将各种颜色的分布多少用柱状图表示出来。
一般matlab里的读取都是txt文件,麻烦一点的有的用excel,毕竟是数据处理的软件嘛。
我觉得你这个图形文件最好能转成txt格式的,一定是有方法转的。
转完了放在matlab就很容易。然后在进行你说的相色分析。
方法如下:
首先,你备份文件,确定格式为,.txt。
然后我们用传统的方法在matlab你面读取你的txt。
尝试这个程序:
M= gallery('integerdata', 100, [5 8], 0);
dlmwrite('myfile.txt', M, 'delimiter', ' ')
D=dlmread('myfile.txt')
第一行是我生成的一个矩阵,然后第二行我写入到文件'myfile.txt'。
这就模拟了你的.dat文件, 改成.txt之后的样子。
你在程序第一行写
D=dlmread('myfile.txt')
就读取了文件。并把读取的,写入到了D矩阵中。
结果如下:
你可以尝试一下。
希望解决了你的疑惑,谢谢。
② matlab如何批量读取图片并作分析
for i=1:452
if i<10
str = ['top00',num2str(i),'.bmp'];
else if i<100
str = ['top0',num2str(i),'.bmp'];
else
str = ['top',num2str(i),'.bmp'];
end
I=imread(str);
Zmax=max(max(I));
Zmin=min(min(I));
TK=(Zmax+Zmin)/2;%初始阈值
flag=1;
[m,n]=size(I);
while(flag)
fg=0;
bg=0;
fgsum=0;
bgsum=0;
for i=1:m
for j=1:n
tmp=I(i,j);
if(tmp>=TK)
fg=fg+1;
fgsum=fgsum+double(tmp);
else
bg=bg+1;
bgsum=bgsum+double(tmp);
end
end
end
u1=fgsum/fg;
u2=bgsum/bg;
TKTmp=uint8((u1+u2)/2);
if(TKTmp==TK)
flag=0;
else
TK=TKTmp;
end
end
end
③ 怎么用matlab画出图片的频谱分析图
1.假设信号域为四舍五入,向量t为n维向量,则信号的离散采样周期为Ts=1/fs=四舍五入/(n-1),其中fs为采样频率。
④ matlab画函数图像怎么分析格图比重
MATLAB的影像处理工具箱支持多种标准的图像处理操作,以方便用户对图像进行分析和调整。这些图像处理操作主要包括: ①获取像素值及其统计数据; ②分析图像,抽取其主要结构信息; ③调整图像,突出其某些特征或抑制噪声
像素值及其统计
MATLAB的影像处理工具箱提供了多个函数以返回与构成图像的数据值相关的信息,这些函数能够以多种形式返回图像数据的信息,主要包括: ①选定像素的数据值(pixval函数和impixel函数); ②沿图像中某个路径的数据值(improfile函数); ③图像数据的轮廓图(imcontour函数); ④图像数据的柱状图(imhist函数); ⑤图像数据的摘要统计值(mean2函数、std2函数和corr2函数); ⑥图像区域的特征度量(imfeature函数)
像素选择 影像处理工具箱中包含两个函数可返回用户指定的图像像素的颜色数据值。 1) pixval函数 当光标在图像上移动时,该函数以交互的方式显示像素的数据值。另外,该函数还可以显示两个像素之间的Euclidean距离。
2) impixel函数 impixel函数可以返回选中像素或像素集的数据值。用户可以直接将像素坐标作为该函数的输入参数,或用鼠标选中像素。 例:
imshow canoe.tif;
val=impixel
对于索引图像,pixel函数和impixel函数都将其显示为存储在颜色映像中的RGB值而不是索引值。
强度描述图 在MATLAB影像处理工具箱中,提供了improfile函数用于沿着图像中一条直线段路径或直线路径计算并绘制其强度(灰度)值。 例:
imshow debyel.tif;
improfile
imshow canoe.tif;
improfile
例:
RGB=imread('flowers.tif');
figure(1);imshow(RGB);
improfile
图像轮廓图 在灰度图的轮廓图显示时,可利用MATLAB影像处理工具箱中的imcontour函数。该函数类似于contour函数,与contour函数相比,其功能更全。它能够自动设置坐标轴对象,从而使得其方向和纵横比能够与所显示的图形相匹配。 例:
I=imread('rice.tif');
imshow(I);
figure;imcontour(I)
I=imread('rice.png');
imshow(I);
figure;imcontour(I)
图像柱状图 图像柱状图可以用来显示索引图像或灰度图像中的灰度分布。可利用MATLAB影像处理工具箱中的imhist函数创建柱状图。 例:以前面介绍的大米灰度图为例来创建该图的柱状图。其代码如下:
I=imread('rice.tif');
imhist(I,64);
I=imread('rice.png');
imhist(I,64);
图像分析
MATLAB中的图像分析技术可以提取图像的结构信息。例如,可以利用影像处理工具箱提供的edge函数来探测边界。这里所谓的边界,其实就是图像中包含的对象所对应的位置。下面介绍几种常见图像分析函数。 1. 灰度图像的边缘:edge函数 该函数的语法如下:
BW=edge(I,method)
返回与I大小一样的二进制图像BW,其中元素I为发现I中的边缘。method为下列字符串之一: ‘sobel’:缺省值,用导数的sobel近似值检测边缘,那些梯度最大点返回边缘; ‘prewitt’:用导数的prewitt近似值检测边缘,在那些梯度最大点返回边缘; ‘roberts’:用导数的roberts近似值检测边缘,在那些梯度最大点返回边缘; ‘log’:使用高斯滤波器的拉普拉斯运算对I进行滤波,通过寻找0相交检测边缘。 ‘zerocross’:使用指定的滤波器对I滤波后,寻找0相交检测边缘。
BW=edge(I,method,thresh)
用thresh指定灵敏度阈值,所有不强于thresh的边缘都被忽略。
BW=edge(I,method,thresh,direction)
对于’sobel’和’prewitt’方法指定方向; direction为字符串:’horizontal’表示水平方向,’vertical’表示垂直方向,’both’两个方向(缺省值)。
BW=edge(I,’log’,thresh,sigma)
用sigma指定标准偏差。
[BW,thresh]=edge(…)。
行四叉树分解:qtdecomp函数 将一块图像分成四块等大小的方块,然后判断每块是否满足同性质的标准,如果满足,则不再分解,否则,再进行细分成四块,并对每块应用测试标准,分解过程重复迭代下去,直到满足标准,结果可能包含不同大小的块。该函数的语法结构如下:
S=qtdecomp(I)
对灰度图像I进行四叉树分解,返回四叉树结构的稀疏矩阵S。
S=qtdecomp(I,threshold)
如果块中元素最大值减去最小值大于threshold,则分解块。threshold为0到1之间的值。
S=qtdecomp(I,threshold,mindim)
如果块小于mindim就不再分解,无论其符合阈值条件与否
S=qtdecomp(I,threshold,[mindim maxdim])
如果块小于mindim或大于maxdim就不再分解,maxdim/mindim必须为2 的幂。
S=qtdecomp(I,FUN)
使用函数FUN确定是否分解块。
S=qtdecomp(I,FUN,P1,P2,…)
获取四叉树分解块值:qtdgetblk函数 该函数的语法结构如下:
[VALS,R,C]=qtdgetblk(I,S,dim)
VALS中对应dim×dim块的值取代I的四叉树分解中的每个dim×dim块。S由qtdecomp函数返回的稀疏矩阵,包含四叉树结构;VALS是dim×dim×k数组,k是四叉树的分解的dim×dim块的数量。如果没有指定大小的块,则返回一个空矩阵。R和C为包含块左上角行列坐标的向量。
[VALS,IDX]=qtdgetblk(I,S,dim)
返回块左上角直线索引的向量IDX。
设置四叉树分解块值:qtsetblk函数
J=qtsetblk(I,S,dim,VALS)
用VALS中对应dim×dim块的值取代I的四叉树分解中的每个dim×dim块。S由qtdecomp函数返回的稀疏矩阵,包含四叉树结构;VALS是dim×dim×k数组,k是四叉树的分解的dim×dim块的数量。
实例 1)图像分析中的灰度边缘检测实例
%调入与显示RGB图像
*RGB=imread('flowers.tif');
isrgb(RGB);
figure(1);imshow(RGB);
RGB=imread('autumn.tif');
isrgb(RGB);
figure(1);imshow(RGB);
% RGB图像转换为灰度图像
I=rgb2gray(RGB);
figure(2);imshow(I);
colorbar('horiz');
isgray(I);
% 边缘检测
ED=edge(I,'sobel',0.08);
figure(3);imshow(ED);
2) Sobel边界探测器和Canny边界探测器在图像分析中的应用实例 操作的对象仍以前面提到rice.tif图像为例。其代码如下:
I=imread('rice.tif');
I=imread('rice.png');
BW1=edge(I,'sobel');
BW2=edge(I,'canny');
figure(1);imshow(BW1);
figure(2);imshow(BW2);
图像调整
MATLAB中的图像高速技术用于图像的改善。此处的“改善”有两个方面的含义,即:客观方面,例如提高图像的信噪比;主观方面,例如通过修正图像的颜色和强度(灰度)使其某些特征更容易辨识。 1. 对比度增强 在MATLAB中,有关函数有: 1) 对比度调整函数:imadjust函数 该函数可用于调整灰度值或颜色图,其用法为:
J=imadjust(I,[low high],[bottom top],gamma)
将灰度图像I转换为图像J,使值从low到high与从bottom到top相匹配。值大于high或小于low的被剪去,即小于low的值与bottom相匹配,大于high的值与top相匹配。使用该函数时可将[low high]或[bottom top]指定为空矩阵[ ],此时缺省值为[0 1]。Gamma用来指定描述I和J值关系曲线的形状;gamma < 1,越亮输出值越加强;gamma > 1,越亮输出值越减弱;缺省gamma=1,表示线性变换。
newmap=imadjust(map,[low high],[bottom top],gamma)
对索引图像的颜色图进行变换。如果[low high]和[bottom top]均为2×3矩阵,则gamma为1×3向量,imadjust函数分别调整红、绿、蓝成分,调整后的颜色图newmap大小与原来的map一样。
RGB=imadjust(RGB1,…)
对RGB图像RGB1的每个图像块进行调整。与调整颜色图一样,通过指定[low high]和[bottom top]均为2×3矩阵,gamma为1×3向量,对每个图像块可以使用不同的参数值。如果top < bottom,则图像颜色或灰度将倒置,即倒置变换,得到原图的底片。输入图像可以是uint8或双精度类型值,输出图像与输入图像类型一样。
2) 函数:brighten函数 该函数的用法为:brighten(beta) 使现有颜色图变成更亮或更暗的图。如果0 < beta ≤1,则颜色图增亮;-1≤beta < 0,则颜色图变暗。brighten(beta)可以使用brighten(-beta)还原。
MAP=brighten(beta)
返回当前使用的颜色图的更亮或更暗变换后的颜色图MAP,但不改变现有的显示。
NEWMAP=brighten(MAP,beta)
返回指定颜色图MAP的更亮或更暗变换后的新颜色图NEWMAP,但不改变显示。
brighten(FIG,beta)
增强图FIG的所有物体。
3) 直方图调整法 在MATLAB中,histeq函数用直方图均衡增强对比度。直方图均衡通过转换灰度图像亮度值或索引图像的颜色图值来增强图像对比度,输出图像的直方图近似与给定的直方图相匹配。
J=histeq(I,hgram)
转换灰度图像I,使输出图像J的直方图具有length(hgram)个条,近似与hgram相匹配。向量hgram包含等间隔条灰度值的整数计数个数。
J=histeq(I,N)
将灰度图像I转化成具有N个离散灰度级的灰度图像J,N缺省值为64。
[J,T]=histeq(I)
返回灰度级变换,使J的灰度级与I的灰度级相匹配。
NEWMAP=histeq(X,MAP,hgram)
变换索引图像X的颜色图,使索引图像(X,NEWMAP)的灰度级成分与hgram相匹配。返回变换后的颜色图NEWMAP,length(hgram)必须与size(MAP,1)一样。 输入图像可以是uint8或双精度类型。输出颜色图通常为双精度类型。输出T也是双精度类型。
图像平滑 图像平滑主要用于受干扰而质量降低的图像,在MATLAB图像处理工具箱中有关图像噪声的函数有: 1) 向图像增加噪声:imnoise函数 该函数的用法为:
J=imnoise(I,type,…)
向灰度图像I中增加type类型噪声。Type为下列字符串之一: ‘gaussian’:增加GAUSS白噪声; ‘salt & pepper’:增加黑白像素点; ‘speckle’:增加乘法噪声。 根据类型再确定其他参数。
J=imnoise(I, ‘gaussian’,M,V)
在图像I中加入均值为M、方差为V的高斯白噪声。缺省值为0,方差为0.01的噪声。
J=imnoise(I, ‘salt & pepper’,D)
在图像I中加入强度为D的“树盐”黑白像素点。其效果近似于:D*prod(size(I))像素。缺省强度为0.05。
J=imnoise(I, ‘speckle’,V)
使用公式J=I+n*I,向图像I中加入乘法噪声,其中n是均值为0,方差为V的均匀分布随机噪声。V缺省值为0.04。 图像I类型为uint8或双精度值,输出图像J与I类型一致。
2) 二维中值滤波器:medfilt2函数
B=medfilt2(A,[M N])
对矩阵A进行二维中值滤波。每个输出像素包含输入图像中相应像素周期的M×N邻域的中值。在图像边缘添加0,因此边缘在[M N]/2内的点可能发生扭曲。[M N]缺省值为[3 3]。
B=medfilt2(A,’indexed’,…)
将A当作索引图像处理,如果A为uint8类,填补0;如果A为双精度类,则填补1。
3) 状态统计滤波器:ordfilt2函数
Y=ordfilt2(X,order,domain)
由domain中非0元素指定邻域的排序集中的第order个元素代替X中的每个元素。Domain是一个仅包括0和1的矩阵,1仅定义滤波运算的邻域。
Y=ordfilt2(X,order,domain,S)
S与domain一样大,用与domain的非0值相应的S的值作为附加补偿。
4)二维自适应除噪滤波器:wiener2函数 wiener2函数估计每个像素的局部均值与方差,该函数用法如下:
J=wiener2(I,[M N],noise)
使用M×N大小邻域局部图像均值与偏差,采用像素式自适应滤波器对图像I进行滤波。
[J,noise]=wiener2(I,[M N])
滤波前还有估计附加噪声的能量。
特定区域处理
区域的指定
在进行图像处理时,有时只要对图像中某个特定区域进行处理,并不需要对整个图像进行处理。MATLAB中对特定区域的处理是通过二值掩模来实现的,通过选定一个区域后会生成一个与原图大小相同的二值图像,选定的区域为白色,其余部分为黑色。通过掩模图像,就可以实现对特定区域的选择性处理。下面介绍创建区域的方法: 1. 多边形选择方法 roipoly函数用于设定图像中的多边形区域,该函数返回与输入图像大小一致的二值图像BW,选中的区域值为1,其余的部分值为0。其语法格式为:
BW=roipoly(I,c,r)
其功能是:用向量c、r指定多边形各角点的X、Y轴的坐标。
BW=roipoly(I)
其功能是:是让用户交互选择多边形区域,通过点击鼠标设定多边形区域的角点,用空格键和Del键撤销选择,按Enter键确认选择,确认后该函数返回与输入图像大小一致的二值图像BW,在多边形区域内像素值为1,其余区域内像素值为0。
BW=roipoly(x,y,I,xi,yi)
其功能是:是用矢量x、y建立非默认的坐标系,然后在指定的坐标系下选择由向量xi、yi指定的多边形区域。
[BW,xi,yi]=roipoly(…)
其功能是:交互选择多边形区域,并返回多边形角点的坐标。
[x,y,BW,xi,yi]=roipoly(…)
其功能是:交互选择多边形区域后,还返回多边形顶点在指定的坐标系X-Y下的坐标。
例:根据指定的坐标选择一个六边形区域的程序清单:
I=imread('eight.tif');
c=[222 272 300 272 222 194];
r=[21 21 75 121 121 75];
BW=roipoly(I,c,r);
figure(1);imshow(I);
figure(2);imshow(BW);
其他选择方法 MATLAB图像处理工具箱中提供了可以实现按灰度选择区域的函数roicolor函数,其语法格式为:
BW=roicolor(A,low,high)
其功能是:按指定的灰度范围分割图像,返回二值掩模BW,[low,high]为所要选择区域的灰度范围。如果low大于high,则返回为空矩阵。
BW=roicolor(A,v)
其功能是:按向量v中指定的灰度值来选择区域。 下面是一个按灰度分割图像中的目标的程序清单:
I=imread('rice.tif');
I=imread('rice.png');
BW=roicolor(I,128,255);
figure(1);imshow(I);
figure(2);imshow(BW);
特定区域滤波
MATLAB图像处理工具箱中提供的roifilt2函数用于对特定区域进行滤波,其语法格式为:
J=roifilt2(h,I,BW)
其功能是:使用滤波器h对图像I中用二值掩模BW选中的区域滤波。
J=roifilt2(I,BW,fun)
J=roifilt2(I,BW,fun,P1,P2,…)
其功能是:对图像I中用二值掩模BW选中的区域作函数运算fun,其中fun是描述函数运算的字符串,参数为P1、P2、…。返回图像J在选中区域的像素为图像I经fun运算的结果,其余部分的像素值为I的原始值。
例:对指定区域进行锐化滤波的程序清单:
I=imread('eight.tif');
c=[222 272 300 272 222 194];
r=[21 21 75 121 121 75];
BW=roipoly(I,c,r);
h=fspecial('unsharp');
J=roifilt2(h,I,BW);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);
由运行结果可知:右上角的硬币发生了变化,而其他硬币保持不变。
特定区域填充
MATLAB图像处理工具箱中提供的roifill函数用于对特定区域进行填充,其语法格式为:
J=roifill(I,c,r)
其功能是:填充由向量c、r指定的多边形,c和r分别为多边形各顶点的X、Y坐标。它是通过解边界的拉普拉斯方程,利用多边形边界的点的灰度平滑的插值得到多边形内部的点。通常可以利用对指定区域的填充来“擦”掉图像中的小块区域。
J=roifill(I)
其功能是:由用户交互选取填充的区域。选择多边形的角点后,按Enter键确认选择,用空格键和Del键表示取消一个选择。
J=roifill(I,BW)
其功能是:用掩模图像BW选择区域。
[J,BW]=roifill(…)
其功能是:在填充区域的同时还返回掩模图像BW。
J=roifill(x,y,I,xi,yi)
[x,y,J,BW,xi,yi]=roifill(…)
其功能是:在指定的坐标系X-Y下填充由向量xi,yi指定的多边形区域。
例:下面是一个为填充指定的区域程序清单:
I=imread('rice.tif');
I=imread('rice.png');
c=[52 72 300 270 221 194];
r=[71 21 75 121 121 75];
J=roifill(I,c,r);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);
图形图像文件的读取
图形图像文件操作 相关的函数 已MAT文件加载或保存矩阵数据 Load、save 加载或保存图形文件格式的图像,如BMP、TIFF等 Imread、imwrite 显示加载到MATLAB7.0中的图像 Image、imagesc 信息查询 Imfinfo、ind2rgb
图形图像文件的读取
主要调用格式:
A=imread(filename,fmt) [X,map]=imread(filename,fmt)
[…]=imread(filename) […]=imread(URL, …)
[…]=imread(…,idx) (CUR,ICO,and TIFF only)
[…]=imread(…,idx) (CUR,ICO,and TIFF only)
[…]=imread(…,’frames’,idx) (GIFF only)
[…]=imread(…,ref) (HDF only)
[…]=imread(…,’BackgroundColor’,BG) (PNG only)
[A,map,alpha]=imread(…) (CUR,ICO,and PNG only)
最基本调用格式:
[X,map]=imread(filename,fmt)
*imread('rice.png','5'); %读取rice.png文件的第5帧图像
*RGB=imread(‘earth.jpg’);
%将图像earth.jpg读入MATLAB7.0工作平台,读取数据矩阵为变量RGB
图形图像文件的写入与显示
用imwrite来完成图形图像文件的写人操作: 基本调用格式:imwrite(X,map,filename,fmt)
load clown %根据MAP格式(MATLAB数据文件格式)装载图像
imwrite(X,map,'clown.jpg') %保存为一幅包含小丑图像的JPG文件
可用image函数显示图像,其语法格式:
image(C) image(x,y,C) image(…,’PropertyName’,PropertyValue, …)
image(’PropertyName’,PropertyValue, …) handle=image(…)
函数imagesc与image函数类似,但是它可以自动标度输入数据
load clown %根据MAP格式(MATLAB数据文件格式)装载图像
image(10,10,X) %显示一幅小丑图像,图像的左上角坐标为(0,0)
colormap(map) %
高级图像显示函数imshow,其语法格式为:
imshow(I,n) imshow(I,[low,high]) imshow(BW) imshow(X,map)
imshow(RGB) imshow(…,display_option) imshow(x,y,A, …) imshow filename
h=imshow(…)
I=imread('rice.png')
J=filter2([1 2;-1 -2],I) %用模板[1 2;-1 –2]对图像滤波
imshow(I)
figure,imshow(J,[])
用图像阅读器显示图像
图像阅读器的开关
1.在图像阅览器中显示图像:imview
moonfig=imread('moon.tif');
imview(moonfig)
imview('moon.tif')
指定图像的起始大小 (1) 设置Imviewinitialmaginfication属性为‘fit’,默认值为100,100%显示 (2) 在imview函数中使用Initialmagnification参数,指定值为“fit”。
imshow(X,map,'InitialMaginfication','fit')
关图像阅览器 直接单击窗口下的关闭按钮, 或用下面的语句关闭:imview close all
参考教材: 《数字图像处理及MATLAB实现》余成波编着 重庆大学出版社 TN911.73
⑤ 如何用Matlab处理图片,作灰度分析
第一步:获取图片,假设图片的名字为a.jpg
im=imread('a.jpg');
如果是一幅彩色图,用下面的命令,否则越过下面一步:
im=rgb2gray(im);
此时,你的im已经是灰度图了,可以用imshow(im)来看,该怎么灰度分析就由你定了。例如,作直方图的话,直接用imhist(im)就OK。
⑥ matlab如何批量读取图片并作分析
% 你的代码没有仔细看,有问题在说吧,结果在R中
n=452;
R=zeros(n,1);
forp=1:n
fn=['000'num2str(p)];
fn=fn(length(fn)-1:end);
fn=['top'fn'.bmp'];
I=imread(fn);
Zmax=max(max(I));
Zmin=min(min(I));
TK=(Zmax+Zmin)/2;%初始阈值
flag=1;
[m,n]=size(I);
while(flag)
fg=0;
bg=0;
fgsum=0;
bgsum=0;
fori=1:m
forj=1:n
tmp=I(i,j);
if(tmp>=TK)
fg=fg+1;
fgsum=fgsum+double(tmp);
else
bg=bg+1;
bgsum=bgsum+double(tmp);
end
end
end
u1=fgsum/fg;
u2=bgsum/bg;
TKTmp=uint8((u1+u2)/2);
if(TKTmp==TK)
flag=0;
else
TK=TKTmp;
end
end
BCT=sum(newI(:)==0);
R(p)=BCT;
end;
⑦ 在matlab中知道两函数图像,如何对其进行误差分析呢
在matlab中知道两函数图像,如何对其进行误差分析呢?这类问题可以按下列思路来解决:
1、利用imread函数,读入图像文件
2、利用rgb2gray函数,将RGB 图像或颜色图转换为灰度图
3、利用 im2bw函数,将图像转换为二进制图像
4、利用 bwlabel函数,在矩阵L中,作表示二进制图像的标记
5、利用regionprops函数,测量图像区域的属性
6、利用cat函数,沿指定维度串联,生成新的数组
7、利用max函数,求最大值(误差)
⑧ MATLAB怎么做图像处理
matlab要从命令窗口输入命令来做图像处理
假如你的图像在桌面上,名字是a.bmp
你可以用如下方法读入图片:
I=imread('C:\Documents and settings\Administrator\桌面\a.bmp');
imshow(I) %显示图像
你可以根据此来修改你的小波变换程序,以便用于你的图像处理。你自己先试试,如果不行的话,再把你的程序贴出来,我帮你看看,改好了发给你。
[email protected],欢迎你来问。
王老师
⑨ matlab图像分析。
fitsrea函数是用从FITS文件中读取数据的。
如果beijing.bmp文件是放在MATLAB的WORK文件中。可以用imread函数读取图像。
improfile是用于沿线段计算横截面的像素值。需根据图片的所需的数据来设置参数。
可以用doc improfil查看相关用法。
Example:
I = imread('liftingbody.png');
x = [19 427 416 77];
y = [96 462 37 33];
improfile(I,x,y),grid on;
⑩ MATLAB--数字图像处理 频域图像分析
频域图像分析
1.熟悉MATLAB软件的使用。
2.掌握频域图像分析的原理及数学运算。
1.自选一幅图像,并对其分别添加一定强度的周期噪声和高斯噪声,然后分别采用高斯模板、中值滤波的时域方法以及傅里叶变换和小波变换的频率滤波方法对该含噪图像进行去噪处理,并基于PSNR值和视觉效果这两个指标来比较这四种滤波方法对两种不同噪声的去噪能力。
2.编写一个程序,要求实现下列算法:首先将阁像分割为8x8的子图像,对每个予图像进行FFT.对每个了图像中的64个系数。按照每个系数的方差来排序后,舍去小的变换系数,只保留16个系数,实现4: I的图像压缩。
3.给定一幅行和列都为2的整数次幕图像,用Haar小波基函数对其进行二维小波变换,试着将最低尺度近似分量置零再反变换,结果是什么?如果把垂直方向的细节分量置零,反变换后结果又是什么呢?试解释一下原因。
4.基于小波变换对图像进行不同压缩比的压缩。在同压缩比情况下,对于基于小波变换和基于傅里叶变换的压缩结果,比较=二者保留原图像能里百分比情况。
Win10 64位电脑
MATLAB R2017a
1.傅里叶变换
从纯粹的数学意义上看,傅里叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅里叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅里叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数。
傅里叶逆变换是将图像的频率分布函数变换为灰度分布函数傅里叶变换以前,图像(未压缩的位图)是由对在连续空间(现实空间)上的采样得到一系列点的集合,通常用一个二维矩阵表示空间上各点,记为z=f(x,y)。又因空间是三维的,图像是二维的,因此空间中物体在另一个维度上的关系就必须由梯度来表示,这样我们才能通过观察图像得知物体在三维空间中的对应关系。
2.小波变换
小波变换是时间(空间)频率的局部化分析,它通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节带噪声信号经过预处理,然后利用小波变换把信号分解到各尺度中,在每一尺度下把属于噪声的小波系数去掉,保留并增强属于信号的小波系数,最后再经过小波逆变换回复检测信号。
小波变换在去除噪声时可提取并保存对视觉起主要作用的边缘信息,而传统的基于傅里叶变换去除噪声的方法在去除噪声和边沿保持上存在着矛盾,因为傅里叶变换方法在时域不能局部化,难以检测到局域突变信号,在去除噪声的同时,也损失了图像边沿信息。由此可知,与傅里叶变换去除噪声的方法相比较,小波变换法去除噪声具有明显的性能优势。
3.PSNR算法
peak的中文意思是顶点。而ratio的意思是比率或比列的。整个意思就是到达噪音比率的顶点信号,psnr一般是用于最大值信号和背景噪音之间的一个工程项目。通常在经过影像压缩之后,输出的影像都会在某种程度与原始影像不同。为了衡量经过处理后的影像品质,我们通常会参考PSNR值来衡量某个处理程序能否令人满意。它是原图像与被处理图像之间的均方误差相对于(2 n-1) 2的对数值(信号最大值的平方,n是每个采样值的比特数),它的单位是dB。
SNRP算法
haar基函数进行小波变换
七、实验结果与分析
图 1原图
1.加入周期噪声、高斯噪声
2.对添加了高斯噪声和周期噪声的图像进行高斯滤波
PSNR值
1.对高斯噪声进行高斯滤波后 23.0287
2.对周期噪声进行高斯滤波后 23.4837
2.中值滤波
PSNR值:
1.对高斯噪声进行中值滤波 23.9931
2.对周期噪声进行中值滤波 24.3134
3.傅里叶变换滤波
PSNR值:
1.对添加了高斯噪声的图像进行傅里叶变换滤波 20.4922
2.对添加了周期噪声的图像进行傅里叶变换滤波 18.9736
4.小波变换滤波
PSNR值:
1.对添加了高斯噪声的图像进行小波变换滤波 23.4712
2.对添加了周期噪声的图像进行小波变换滤波 24.4525
分析:
对于高斯噪声,高斯滤波和傅里叶变换滤波声的除噪效果较好,中值滤波效果较差,小波变换滤波的处理效果也比较好
对于周期噪声,中值滤波和高斯滤波效果不是很好,傅里叶变换变换滤波对噪声的去处效果比较好,对于原图像损坏不大,小波变换对原图的损坏较大,但是图片可以看出噪声也去除的比较好。
5.图像压缩(4:1压缩) 原图-左 压缩后-右
分析:
图像压缩算法就是先将一副图像分成很多小块,然后分别对这些小块进行变换,这里采用的是傅里叶变换,然后过滤掉冗余的像素点,然后再利用反变换得到压缩后的图像即可。
小波变换
1.定义
小波变换是时间(空间)频率的局部化分析,它通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节带噪声信号经过预处理,然后利用小波变换把信号分解到各尺度中,在每一尺度下把属于噪声的小波系数去掉,保留并增强属于信号的小波系数,最后再经过小波逆变换回复检测信号。
2.优点
小波变换在去除噪声时可提取并保存对视觉起主要作用的边缘信息,而传统的基于傅里叶变换去除噪声的方法在去除噪声和边沿保持上存在着矛盾,因为傅里叶变换方法在时域不能局部化,难以检测到局域突变信号,在去除噪声的同时,也损失了图像边沿信息。由此可知,与傅里叶变换去除噪声的方法相比较,小波变换法去除噪声具有明显的性能优势。
Haar基函数进行小波变换
图 2原图
图 3 haar变换
图 4 haar反变换后
图 5 最低分量近似置零
图 6 垂直分量置零
小波变换进行图像压缩与傅里叶变换压缩对比
1.压缩比 1:2(左-小波压缩 右-傅里叶压缩)
2.压缩比 1:4(左-小波压缩 右-傅里叶压缩)
通过这次实验,学到了很多。特别是在傅里叶变换和小波变换等方面,开始的时候连傅里叶变换的基础基础也不懂,后来在csdn上看了一篇讲解傅里叶变换的文章,豁然开朗,傅里叶变换居然可以将一个时域信号转化到频域,而且自己还对与i有了更加深刻的理解。虽然傅里叶变换可以把信号从时域转换到频域,但是频域与时域的对应关系却无法一一对应,所以诞生了小波变换。小波变换的特别之处就是可以把一个时域上的信息转换为时域-频域一一对应,这对应特殊信号的提取是有很好的效果,在一定程度上比傅里叶变换更厉害。但是在傅里叶、小波等基础概念知识方面,自己还是涉猎的比较少,原理的论证公式太复杂了。