MATLAB 图像边缘提取 图像高斯低通滤波 DCT变换 程序
实验二边缘提取
作业要求:
1.参考“空间域图像增强”课的内容, 用Sobel边缘算子提取图像边缘实验程序如下:
RGB=imread('E:\图像信号处理\bmp格式图片\美女.bmp');
isrgb(RGB);
figure;
imshow(RGB);
I=rgb2gray(RGB);
imshow(I);
colorbar('horiz');
isgray(I);
ED=edge(I,'sobel',0.08);
imshow(ED)
运行结果如下:
实验四高斯低通滤波器
作业要求:
参考“频率域图像增强”课的内容, 采用高斯低通滤波器对图片进行滤波操作, 取半径为5, 15, 30, 80和230, 分别输出结果图片
实验程序如下:(d0=5)
I1=imread('E:\图像信号处理\bmp格式图片\荷花.bmp');
I=rgb2gray(I1);
s=fftshift(fft2(I));
[M,N]=size(s);
n=2;
d0=5;
n1=floor(M/2);
n2=floor(N/2);
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2);
h=1*exp(-1/2*(d^2/d0^2));
s(i,j)=h*s(i,j);
end
end
s=ifftshift(s);
s=uint8(real(ifft2(s)));
figure;
imshow(s);
title('GLPF滤波(d0=5)');
实验六DCT变换
作业要求:
1.参考“图像压缩”课的内容, 并参考有关资料, 对输入图像进行离散余弦变换
2.通过离散余弦逆变换, 还原出原图片
实验程序如下:
RGB=imread('E:\图像信号处理\bmp格式图片\美女.bmp');
figure(1);
imshow(RGB);
I=rgb2gray(RGB); figure(2);
imshow(I);
J=dct2(I);
figure(3);
imshow(log(abs(J)),[]); colormap(jet(64)); colorbar;
J(abs(J)<11)=0;
K=idct2(J)/255; figure(4);
imshow(K)。
MATLAB图像处理dct和dwt变换信息处理
subplot(2,2,1);
imshow(GR);
D=dct2(GR); %计算DCT dct2:二维离散余弦变换
subplot(2,2,2);
imshow(D,[0,5]);%abs(D):求整数绝对值[]:规定输出范围
colormap(gray(4));colorbar;%输出一个灰色系的曲面图
%总结二
clear;
RGB=imread('lenacaise.jpeg');
GR=rgb2gray(RGB);%转换成灰度图像
figure(1);imshow(GR);
D=dct2(GR); %计算DCT dct2:二维离散余弦变换
figure(2);imshow(abs(D),[0,5]);%abs(D):求整数绝对值[]:规定输出范围
A=upcoef2('a',cA,'bior3.7',1); %重构细节分量信号
H=upcoef2('h',cH,'bior3.7',1); % 重构水平分量信号
V=upcoef2('v',cV,'bior3.7',1); % 重构垂直分量信号
D=upcoef2('d',cD,'bior3.7',1); % 重构对角线分量信号
%显示各分量
subplot(2,2,1);image(wcodemat(A,192));title('细节分量');%wcodemat:对矩阵进行量化编码
subplot(2,2,2);image(wcodemat(H,192));title('水平分量');
Matlab图像处理函数总结
Matlab图像处理函数汇总:1、图像的变换①fft2:fft2函数用于数字图像的二维傅立叶变换,如:i=imread('104_8.tif');j=fft2(i);②ifft2::ifft2函数用于数字图像的二维傅立叶反变换,如:i=imread('104_8.tif');j=fft2(i);k=ifft2(j);2、模拟噪声生成函数和预定义滤波器①imnoise:用于对图像生成模拟噪声,如:i=imread('104_8.tif');j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声②fspecial:用于产生预定义滤波器,如:h=fspecial('sobel');%sobel水平边缘增强滤波器h=fspecial('gaussian');%高斯低通滤波器h=fspecial('laplacian');%拉普拉斯滤波器h=fspecial('log');%高斯拉普拉斯(LoG)滤波器h=fspecial('average');%均值滤波器2、图像的增强①直方图:imhist函数用于数字图像的直方图显示,如:i=imread('104_8.tif');imhist(i);②直方图均化:histeq函数用于数字图像的直方图均化,如:i=imread('104_8.tif');j=histeq(i);③对比度调整:imadjust函数用于数字图像的对比度调整,如:i=imread('104_8.tif'); j=imadjust(i,[0.3,0.7],[]);④对数变换:log函数用于数字图像的对数变换,如:i=imread('104_8.tif');j=double(i);k=log(j);⑤基于卷积的图像滤波函数:filter2函数用于图像滤波,如:i=imread('104_8.tif');h=[1,2,1;0,0,0;-1,-2,-1];j=filter2(h,i);⑥线性滤波:利用二维卷积conv2滤波, 如:i=imread('104_8.tif');h=[1,1,1;1,1,1;1,1,1];h=h/9;j=conv2(i,h);⑦中值滤波:medfilt2函数用于图像的中值滤波,如:i=imread('104_8.tif');j=medfilt2(i);⑧锐化(1)利用Sobel算子锐化图像, 如:i=imread('104_8.tif');h=[1,2,1;0,0,0;-1,-2,-1];%Sobel算子j=filter2(h,i);(2)利用拉氏算子锐化图像, 如:i=imread('104_8.tif');j=double(i);h=[0,1,0;1,-4,0;0,1,0];%拉氏算子k=conv2(j,h,'same');m=j-k;3、图像边缘检测①sobel算子如:i=imread('104_8.tif');j = edge(i,'sobel',thresh)②prewitt算子如:i=imread('104_8.tif');j = edge(i,'prewitt',thresh)③roberts算子如:i=imread('104_8.tif');j = edge(i,'roberts',thresh)④log算子如:i=imread('104_8.tif');j = edge(i,'log',thresh)⑤canny算子如:i=imread('104_8.tif');j = edge(i,'canny',thresh)⑥Zero-Cross算子如:i=imread('104_8.tif');j = edge(i,'zerocross',thresh)4、形态学图像处理①膨胀:是在二值化图像中“加长”或“变粗”的操作,函数imdilate执行膨胀运算,如:a=imread('104_7.tif'); %输入二值图像b=[0 1 0;1 1 1;0 1 0];c=imdilate(a,b);②腐蚀:函数imerode执行腐蚀,如:a=imread('104_7.tif'); %输入二值图像b=strel('disk',1);c=imerode(a,b);③开运算:先腐蚀后膨胀称为开运算,用imopen来实现,如:a=imread('104_8.tif');b=strel('square',2);c=imopen(a,b);④闭运算:先膨胀后腐蚀称为闭运算,用imclose来实现,如:a=imread('104_8.tif');b=strel('square',2);c=imclose(a,b);====================================================== =====Matlab 图像处理相关函数命令大全一、通用函数:colorbar 显示彩色条语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ col orbar(...,'peer',axes_handle)getimage 从坐标轴取得图像数据语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \ [...]=getimag eimshow 显示图像语法: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 (...)montage 在矩形框中同时显示多幅图像语法:montage(I) \ montage(BW) \ montage(X,map) \ montage(RGB) \ h=montage (...)immovie 创建多帧索引图的电影动画语法:mov=immovie(X,map) \ mov=immovie(RGB)subimage 在一副图中显示多个图像语法:subimage(X,map) \ subimage(I) \ subimage(BW) \ subimage(RGB) \ subimage (x,y,...) \ subimage(...)truesize 调整图像显示尺寸语法:truesize(fig,[mrows mcols]) \ truesize(fig)warp 将图像显示到纹理映射表面语法:warp(X,map) \ warp(I ,n) \ warp(z,...) warp(x,y,z,...) \ h=warp(...)zoom 缩放图像语法:zoom on \ zoom off \ zoom out \ zoom reset \ zoom \ zoom xon \ zoom yo n\ zoom(factor) \ zoom(fig,option)二、图像文件I/O函数命令imfinfo 返回图形图像文件信息语法:info=imfinfo(filename,fmt) \ info=imfinfo(filename)imread 从图像文件中读取(载入)图像语法:A=imread(filename,fmt) \ [X,map]=imread(filename,fmt) \ [...]=imread(filename) \ [...]=imread(URL,...) \ [...]=imread(...,idx) (CUR,ICO,and TIFF only) \ [...]=imread (...,'frames',idx) (GIF only) \ [...]=imread(...,ref) (HDF only) \ [...]=imread(...,'Backgr oundColor',BG) (PNG only) \ [A,map,alpha] =imread(...) (ICO,CUR,PNG only) imwrite 把图像写入(保存)图像文件中语法:imwrite(A,filename,fmt) \ imwrite(X,map,filename,fmt) \ imwrite(...,filename) \ i mwite(...,Param1,Val1,Param2,Val2...)imcrop 剪切图像语法:I2=imcrop(I) \ X2=imcrop(X,map) \ RGB2=imcrop(RGB) \ I2=imcrop(I,rect) \ X2=imcrop(RGB,rect) \ [...]=imcrop(x,y,...) \ [A,rect]=imcrop(...) \ [x,y,A,rect]=imcro p(...)imresize 改变图像大小语法:B=imresize(A,m,method)imrotate 旋转图像语法:B=imrotate(A,angle,method) \ B=imrotate(A,angle,method,'crop')三、像素和统计处理函数corr2 计算两个矩形的二维相关系数语法:r=corr2(A,B)imcontour 创建图像数据的轮廓图语法:imcontour(I,n) \ imcontour(I,v) \ imcontour(x,y,...) \ imcontour(...,LineSpec) \ [C,h] =imcontour(...)imfeature 计算图像区域的特征尺寸语法:stats=imfeature(L,measurements) \ stats=imfeature(L,measurements,n)imbist 显示图像数据的柱状图impixel 确定像素颜色值语法:P=impixel(I) \ P=impixel(X,map) \ P=impixel(RGB) \ P=impixel(I,c,r) \ P=impix el(X,map,c,r) \ P=impixel(RGB,c,r) \ [c,r,P]=impixel(...) \ P=impixel(x,y,I,xi,yi) \ P=im pixel(x,y,RGB,xi,yi) \ P=impixel(x,y,X,map,xi,yi) \[xi,yi,P]=impixel(x,y,...)improfile 沿线段计算剖面图的像素值语法:c=improfile \ c=improfile(n) \ c=improfile(I,xi,yi) \ c=improfile(I,xi,yi,n) \ [cx,c y,c]=improfile(...) \ [cx,cy,c,xi,yi]=improfile(...) \ [...]=improfile(x,y,I,xi,yi) \ [...]=im profile(x,y,I,xi,yi,n) \ [...]=improfile(...,method)mean2 计算矩阵元素的平均值语法:B=mean2(A)pixval 显示图像像素信息语法:pixval onstd2 计算矩阵元素的标准偏移语法:b=std2(A)四、图像分析函数:edge 图像边缘检测语法:BW=edge(I,'sobel') \ BW=edge(I,'sobel',thresh) \ BW=edge(I,'sobel',thresh,direc tion) \ [BW,thresh]=edge(I,'sobel',...) \ BW=edge(I,'prewitt') \ BW=edge(I,'prewitt',th resh) \ BW=edge(I,'prewitt',thresh,direction) \[BW,thresh]=edge(I,'prewitt',...) \ BW=edge(I,'roberts') \ BW=edge(I,'roberts',thresh) \ [BW,thresh]=edge(I,'roberts',...) \ BW=edge(I,'log') \ BW=edge(I,'log',thresh) \ B W=edge(I,'log',thresh,sigma) \ [BW,threshold]=edge(I,'log',...) \ BW=edge(I,'zerocross ',thresh,h) \ [BW,thresh]=edge(I,'zerocross',...) \BW=edge(I,'canny') \ BW=edge(I,'canny',thresh) \ BW=edge(I,'canny',thresh,sigma) \ [BW,threshold]=edge(I,'canny',...)qtgetblk 获取四叉树分解的块值语法:[vals,r,c]=qtgetblk(I,S,dim) \ [vals,idx]=qtgetblk(I,S,dim)qtsetblk 设置四叉树分解中的块值语法:J=qtsetblk(I,S,dim,vals)五、图像增强函数histeq 用柱状图均等化增强对比语法:J=histeq(I,hgram) \ J=histeq(I,n) \ [J,T]=histeq(I,...) \ newmap=histeq(X,map, hgram) \ newmap=histeq(X,map)imadjust 调整图像灰度值或颜色映像表语法:J=imadjust(I,[low_in ,high_in]),[low_out ,high_out],gamma) \ newmap=imadjus t(map,[low_in ,high_in]),[low_out ,high_out],gamma) \ RGB2=imadjust(RGB1,...) imnoise 增强图像的渲染效果语法:J=imnoise(I,type) \ J=imnoise(I,type,parameters)medfilt2 进行二维中值过滤语法:B=medfilt2(A,[m n]) \ B=medfilt2(A) \ B=medfilt2(A,'indexed',...)ordfilt2 进行二维统计顺序过滤语法:B=ordfilt2(A,order,domain) \ B=ordfilt2(A,order,domain,S) \ B=ordfilt2(...,padop t)wiener2 进行二维适应性去噪过滤处理语法:J=wiener2(I,[m n],noise) \ [J,noise]=wiener2(I,[m n])六、线性滤波函数conv2 进行二维卷积操作语法:C=conv2(A,B) \ C=conv2(hcol,hrow,A) \ C=conv2(...,'shape')convmtx2 计算二维卷积矩阵语法:T=convmtx2(H,m,n) \ T=convmtx2(H,[m n])convn 计算n维卷积语法:C=convn(A,B) \ C=convn(A,B,'shape')filter2 进行二维线性过滤操作语法:Y=filter2(h,X) \ Y=filter2(h,X,shape)fspecial 创建预定义过滤器语法:h=fspecial(type) \ h=fspecial(type,parameters)七、线性二维滤波设计函数freqspace 确定二维频率响应的频率空间语法:[f1,f2]=freqspace(n) \ [f1,f2]=freqspace([m n]) \ [x1 ,y1]=freqspace(...,'meshg rid') \ f=freqspace(N) \ f=freqspace(N,'whole')freqz2 计算二维频率响应语法:[H,f1,f2]=freqz2(h,n1,n2) \ [H,fi,f2]]=freqz2(h,[n2,n1]) \ [H,fi,f2]]=freqz2(h,f1,f 2]) \ [H,fi,f2]]=freqz2(h) \ [...]=freqz2(h,...,[dx dy]) \ [...]=freqz2(h,...,dx) \ freqz2 (...)fsamp2 用频率采样法设计二维FIR过滤器语法:h=fsamp2(Hd) \ h=fsamp2(f1,f2,Hd,[m n])ftrans2 通过频率转换设计二维FIR过滤器语法:h=ftrans2(b,t) \ h=ftrans2(b)fwind1 用一维窗口方法设计二维FIR过滤器语法:h=fwind1(Hd,win) \ h=fwind1(Hd,win1,win2) \ h=fwind1(f1,f2,Hd,...)fwind2 用二维窗口方法设计二维FIR过滤器语法:h=fwind2(Hd,win) \ h=fwind2(f1,f2,Hd,win)八、图像变换函数dct2 进行二维离散余弦变换(反余弦变换用idct2)语法:B=dct2(A) \ B=dct2(A,m.n) \ B=dct2(A,[m n])dctmtx 计算离散余弦傅立叶变换语法:D=dctmtx(n)fft2 进行二维快速傅立叶变换(反变换用ifft2)语法:Y=fft2(X) \ Y=fft2(X,m,n)fftn 进行n维快速傅立叶变换(反变换用ifftn)语法:Y=ffn(X) \ Y=fftn(X,siz)fftshift 快速傅立叶变换的DC组件移到光谱中心语法:Y=fftshift(X) \ Y=fftshift(X,dim)iradon 进行反radon变换语法:I=iradon(P,theta) \ I=iradon(P,theta,interp,filter,d,n) \ [I,h]=iradon(...) phantom 产生一个头部幻影图像语法:P=phantom(def,n) \ P=phantom(E,n) \ [P,E]=phantom(...)radon 计算radon变换语法:R=radon(I,theta) \ [R,xp]=radon(...)九、边沿和块处理函数bestblk 确定进行块操作的块大小语法:siz=bestblk([m n],k) \ [mb,nb]=bestblk([m n],k)blkproc 实现图像的显示块操作语法:B=blkproc(A,[m n]),fun) \ B=blkproc(A,[m n],fun,P1,P2,...) \ B=blkproc(A,[m n], [mborder nborder],fun,...)col2im 将矩阵的列重新组织到块中语法:A=col2im(B,[m n],[mm nn],block_type) \ A=col2im(B,[m n],[mm nn])colfilt 利用列相关函数进行边沿操作语法:B=colfilt(A,[m n],block_type,fun) \ B=colfilt(A,[m n],block_type,fun,P1,P2,...) \ B=colfilt(A,[m n],[mblock nblock],...) \ B=colfilt(A,'indexed',...)im2col 重调图像块为列语法:B=im2col(A,[m n],block_type) \ B=im2col(A,[m n]) \ B=im2col(A,'indexed',...)nlfilter 进行边沿操作语法:B=nlfilter(A,[m n],fun) \ B=nlfilter(A,[m n],fun,P1,P2,...) \ B=nlfilter(A,'indexed ',...)十、二进制图像操作函数applylut 在二进制图像中利用lookup表进行行边沿操作语法:A=applylut(BW,LUT)bwarea 计算二进制图像对象的面积语法:total=bwarea(BW)bweuler 计算二进制图像的欧拉数语法:eul=bweuler(BW)bwfill 填充二进制图像的背景色语法:BW2=bwfill(BW1,c,r,n) \ BW2=bwfill(BW1,n) \ [BW2,idx]=bwfill(...) \ BW2=bwf ill(x,y,BW1,xi,yi,n) \ [x,y,BW2,idx,xi,yi]=bwfill(...) \ [BW2,idx]=bwfill(BW1,'holes',n) bwlabel 标注二进制图像中已连接的部分语法:L=bwlabel(BW,n) \ [L,num]=bwlabel(BW,n)bwmorph 提取二进制图像的轮廓语法:BW2=bwmorph(BW1,operation) \ BW2=bwmorph(BW1,operation,n)bwperim 计算二进制图像中对象的周长语法:BW2=bwperim(BW1) \ BW2=bwperim(BW1,CONN)bwselect 在二进制图像中选择对象语法:BW2=bwselect(BW1,c,r,n) \ BW2=bwselect(BW1,n) \ [BW2,idx]=bwselect(...) \ BW2=bwselect(x,y,BW1,xi,yi,n) \ [x,y,BW2,idx,xi,yi]=bwselect(...)dilate 放大二进制图像语法:BW2=dilate(BW1,SE) \ BW2=dilate(BW1,SE,alg) \ BW2=dilate(BW1,SE,...,n) erode 弱化二进制图像的边界语法:BW2=erode(BW1,SE) \ BW2=erode(BW1,SE,alg) \ BW2=erode(BW1,SE,...,n) makelut 创建一个用于applylut函数的lookup表语法:lut=makelut(fun,n) \ lut=makelut(fun,n,P1,P2,...)十一、区域处理函数roicolor 选择感兴趣的颜色区语法:BW=roicolor(A,low,high) \ BW=rocicolor(A,v)roifill 在图像的任意区域中进行平滑插补语法:J=roifill(I,c,r) \ J=roifill(I) \ J=roifill(I,BW) \ [J,BW]=roifill(...) \ J=roifill(x,y,I,xi,y i) \ [x,y,J,BW,xi,yi]=roifill(...)roifilt2 过滤敏感区域语法:J=roifilt2(h,I,BW) \ J=roifilt2(I,BW,fun) \ J=roifilt2(I,BW,fun,P1,P2,...)roipoly 选择一个敏感的多边形区域语法:BW=roipoly(I,c,r) \ BW=roipoly(I) \ BW=roipoly(x,y,I,xi,yi) \ [BW,xi,yi]=roipoly (...) \ [x,y,BW,xi,yi]=roipoly(...)十二、颜色映像处理函数brighten 增加或降低颜色映像表的亮度语法:brighten(beta) \ brighten(h,beta) \ newmap=brighten(beta) \ newmap=brighten (cmap,beta)cmpermute 调整颜色映像表中的颜色语法:[Y,newmap]=cmpermute(X,map) \ [Y,newmap]=cmpermute(X,map,index) cmunigue 查找颜色映像表中特定的颜色及相应的图像语法:[Y,newmap]=cmunigue(X,map) \ [Y,newmap]=cmunigue(RGB) \ [Y,newmap]=c munique(I)imapprox 对索引图像进行近似处理语法:[Y,newmap]=imapprox(X,map,n) \ [Y,newmap]=imapprox(X,map,tol) \ Y=imap prox(X,map,newmap) \ [...]=imapprox(...,dither_option)rgbplot 划分颜色映像表语法:rgbplot(cmap)十三、颜色空间转换函数hsv2rgb 转换HSV值为RGB颜色空间:M=hsv2rgb(H)ntsc2rgb 转换NTSC值为RGB颜色空间:rgbmap=ntsc2rgb(yiqmap) \ RGB=ntsc2rgb(YI Q)rgb2hsv 转换RGB值为HSV颜色空间:cmap=rgb2hsv(M)rgb2ntsc 转换RGB值为NTSC颜色空间:yiqmap=rgb2ntsc(rgbmap) \ YIQ=rgb2ntsc(RG B)rgb2ycbcr 转换RGB值为YCbCr颜色空间:ycbcrmap=rgb2ycbcr(rgbmap) \ YCBCR=rgb 2ycbcr(RGB)ycbcr2rgb 转化YCbCr值为RGB颜色空间:rgbmap=ycbcr2rgb(ycbcrmap) \ RGB=ycbcr 2rgb(YCBCR)十四、图像类型和类型转换函数dither 通过抖动增加外观颜色分辨率转换图像语法:X=dither(RGB,map) \ BW=dither(I)gray2ind 转换灰度图像为索引图像语法:[X,map]=gray2ind(I,n) \ [X,map]=gray2ind(BW,n)grayslice 从灰度图像为索引图像语法:X=grayslice(I,n) \ X=grayslice(I,v)im2bw 转换图像为二进制图像语法:BW=im2bw(I,level) \ BW=im2bw(X,map,level) \ BW=im2bw(RGB,level)im2double 转换图像矩阵为双精度型语法:I2=im2double(I1) \ RGB2=im2double(RGB1) \ I=im2double(BW) \ X2=im2doub le(X1,'indexed')double 转换数据为双精度型语法:double(X)unit8 、unit16转换数据为8位、16位无符号整型:i=unit8(x) \ i=unit16(x)im2unit8 转换图像阵列为8位无符号整型语法:I2=im2unit8(I1) \ RGB2=im2unit8(RGB1) \ I=im2unit8(BW) \ X2=im2unit8(X1,'i ndexed')im2unit16 转换图像阵列为16位无符号整型语法:I2=im2unit16(I1) \ RGB2=im2unit16(RGB1) \ I=im2unit16(BW) \ X2=im2unit16 (X1,'indexed')ind2gray 把检索图像转化为灰度图像语法:I=ind2gray(X,map)ind2rgb 转化索引图像为RGB真彩图像语法:RGB=ind2rgb(X,map)isbw 判断是否为二进制图像语法:flag=isbw(A)isgray 判断是否为灰度图像语法:flag=isgray(A)isind 判断是否为索引图像语法:flag=isind(A)isrgb 判断是否为RGB真彩色图像语法:flag=isrgb(A)mat2gray 转换矩阵为灰度图像语法:I=mat2gray(A,[amin amax]) \ I=mat2gray(A)rgb2gray 转换RGB图像或颜色映像表为灰度图像语法:I=rgb2gray(RGB) \ newmap=rgb2gray(map)rgb2ind 转换RGB图像为索引图像语法:[X,map]=rgb2ind(RGB,tol) \ [X,map]=rgb2ind(RGB,n) \ X=rgb2ind(RGB,map) \ [...]=rgb2ind(...,dither_option)十五、新增图像处理工具箱函数adapthisteq 限制对比度直方图均衡化: J=adapthisteq(I) \ J=adapthisteq(I,param1,val1, param2,val2...)applycform 用于颜色空间变换out=applyform(I,C)bwboundaries 描绘二进制图像边界语法:B=bwboundaries(BW) \ B=bwboundaries(BW,CONN) \ B=bwboundaries(BW,CO NN,options) [BW,CONN,options] \ [BL]=bwboundaries(...) \ [BLNA]=bwboundaries() bwtraceboundary 描述二进制图像中的物体B=bwtraceboundary(BW,P,fstep) \ B=bwtraceboundary(BW,P,fstep,CONN) \ B=bwtrac eboundary(...N,dir)decorrstrech 对多通道图像进行去相关处理语法:S=decorrstretch(I) \ S=decorrstretch(I,TOL)dicomdict 获取或读取DICOM文件语法:dicomdict('set',dictionary) \ dictionary=dicomdict('get')getline 用鼠标选择ployline语法:[x,y]=getline(fig) \ [x,y]=getline(ax) \ [x,y]=getline \ [x,y]=getline(...,'closed') getpts 用鼠标选择像素点语法:[x,y]=getpts(fig) \ [x,y]=getpts(ax) \ [x,y]=getptsgetrect 用鼠标选择矩阵语法:rect=getrect(fig) \ rect=getrect(ax) \ rect=getrect(fig)iccread 读取ICC剖面语法:P=iccread(filename)im2java2d 将图像转换为Java缓冲图像语法:jimage=im2java2d(I) \ jimage=im2java2d(X,MAP)imview 在图像与蓝旗中显示图像语法:imview(I) \ imview(RGB) \ imview(X,map) \imview(I,range) \ imview(filename) \ imview(....'InitialMagnification',initial_mag) \ h=imview(...) \ imview close allippl 检查IPPL的存在语法:TF=ippl \ [TF B]=ippliptdemos 显示图像处理工具箱中的索引图像lab2double、lab2unit16、lab2unit8 将L*a*b数据分别转换为双精度、16位数据、8位数据makecform 创造一个色彩转换结构poly2mask 把多边形区域转换成mask区域语法:BW=poly2mask(x,y,m,n)unitlut 查找表中A像素值语法:B=unitlut(A,LUT)xyz2double、xyz2unit16 将颜色数据从XYZ转换到双精度、16进制。
Matlab图像滤波(全解)
K=medfilt2(J,[4,4])%进行中值滤波;
subplot(2,2,3);
imshow(K);
title('进行中值滤波');
h=ones(3,3)/9;%多维滤波
w=h;
g=imfilter(I,w,'conv','replicate')
subplot(2,2,4);
imshow(g);
title('多维滤波');
%使用中心为-4,-8的拉普拉斯滤波器,
w4=[1 1 1;
1 -4 1;
1 1 1];
w8=[1 1 1;
1 -8 1;
1 1 1];
f=im2double(I);
g4=f-imfilter(f,w4,'replicate');
J2=ifft2(result);
J3=uint8(abs(J2));
subplot(427);
imshow(J3,[ ]);
title('频域处理后的图像');
subplot(422)
imhist(I,64);
subplot(424)
imhist(f,64);
subplot(426)
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %从频域的角度进行亮度变换
% %fft2
% %由于能量主要集中在低频部分
% %所以对低频进行处理可
matlab 频域高斯低通滤波
matlab 频域高斯低通滤波一、前言在数字图像处理中,滤波是一种常用的技术。
频域滤波是其中一种基于傅里叶变换的滤波方法,可以有效地去除图像中的噪声。
高斯低通滤波是其中一种常用的频域滤波方法,可以平滑图像并去除高频噪声。
本文将详细介绍 MATLAB 中如何实现频域高斯低通滤波。
二、MATLAB 中的频域滤波MATLAB 中提供了许多函数来实现频域滤波,例如 fft2, ifft2, fftshift, ifftshift 等。
其中 fft2 和 ifft2 分别表示二维快速傅里叶变换和逆变换,fftshift 和 ifftshift 分别表示将零频分量移到中心位置和将中心位置移到零频分量处。
三、高斯低通滤波原理在进行高斯低通滤波之前,需要先了解高斯函数和低通滤波器的概念。
1. 高斯函数高斯函数是一个连续函数,其形式为:$$g(x,y)=\frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}} $$其中 $\sigma$ 是标准差。
在图像处理中,高斯函数可以用来平滑图像并去除噪声。
2. 低通滤波器低通滤波器是一种可以通过去除高频信号来平滑图像的滤波器。
在频域中,低通滤波器可以通过将高频信号设置为零来实现。
3. 高斯低通滤波原理高斯低通滤波是一种将高斯函数与低通滤波器相结合的方法。
具体来说,可以通过以下步骤来实现:1)对输入图像进行二维傅里叶变换,得到频域图像。
2)在频域图像中心位置创建一个和输入图像大小相同的矩形掩膜,掩膜内部数值为 1,外部数值为 0。
3)将掩膜与一个高斯函数卷积,得到一个新的掩膜。
4)将新的掩膜应用于频域图像,得到经过高斯低通滤波后的频域图像。
5)对经过滤波后的频域图像进行逆傅里叶变换,得到经过高斯低通滤波后的空域图像。
四、MATLAB 中实现高斯低通滤波在 MATLAB 中实现高斯低通滤波可以通过以下步骤来完成:1)读入图像并显示。
MATLAB图像滤波与增强技术介绍
MATLAB图像滤波与增强技术介绍引言:在现代科技的发展和普及中,数字图像处理成为了一个重要的领域。
其中,图像滤波和增强技术是数字图像处理中不可或缺的一环。
MATLAB作为一种强大的数学计算软件,为图像滤波和增强提供了丰富的工具集合。
本文将介绍一些常用的MATLAB图像滤波和增强技术,包括线性滤波、非线性滤波、频域滤波和直方图均衡化等。
一、线性滤波技术线性滤波是最简单也是最基础的图像滤波技术之一。
它的基本原理是将输入图像的每个像素点与周围邻域内的像素点按照一定的权重进行加权平均。
MATLAB 提供了几种常用的线性滤波函数,如均值滤波、中值滤波和高斯滤波等。
1. 均值滤波均值滤波是一种最简单的线性滤波技术,其原理是用每个像素周围邻域内像素的平均值来代替原像素的值。
在MATLAB中,可以使用imfilter函数进行均值滤波操作。
通过设置不同大小的滤波器窗口,可以调整滤波效果的平滑程度。
2. 中值滤波中值滤波是一种常用于去除图像中的椒盐噪声或悬浮颗粒的非线性滤波技术。
中值滤波的原理是使用像素邻域内像素的中值来代替原像素的值。
MATLAB中的medfilt2函数可以实现中值滤波操作。
与均值滤波不同,中值滤波更适合用于去除噪声,同时保持图像的边缘细节。
3. 高斯滤波高斯滤波是一种常用的线性滤波技术,它基于高斯核函数来实现图像的平滑处理。
高斯滤波可以有效地去除图像中的高频噪声,并且能够保持图像的边缘信息。
在MATLAB中,可以使用fspecial函数生成高斯滤波器核,并利用imfilter函数进行滤波操作。
二、非线性滤波技术非线性滤波技术在一些特殊情况下可以实现更好的滤波效果。
常用的非线性滤波技术包括中值滤波、双边滤波和非局部均值滤波等。
1. 双边滤波双边滤波是一种结合了空域信息和灰度信息的滤波技术。
它能够在保持边缘信息的同时,对图像进行平滑处理。
在MATLAB中,可以使用bfilter2函数实现双边滤波操作。
图象DCT变换的MATLAB实现
图象DCT变换的MATLAB实现global gmain Data;[fname,pname]=uigetfile('*.jpg','打开文件');if fname==0return;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);function DCT code;global Data;%全局变量,用于共享图像数据[m,n]=size(Data);fid=fopen('dct.bin','w+'); %创建dct.bin用存储DCT和BTC混合编码后的二进制文件。
%补0使尺寸为4的整数倍以便分块m1=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大小的子带for j=1:4:nfor i=1:4:mfor t=0:1:3for p=0:1:3block(1+t,1+p)=Datatemp(i+t,j+p); %取出4X4数据块endend%对变换后数据进编码后存储或发送,只取其中的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');endendfclose(fid);function IDctcode;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);%读取方块数据for j=1:4:nfor i=1:4:mblock(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);for t=0:1:3for p=0:1:3Data(i+t,j+p)=temp(1+t,1+p);endendendenddata=uint8(Data); subplot(1,2,2); imshow(data);%显示图像fclose(fid);。
图像的DCT变换与反变换
ticclose allI=imread('D:\MATLAB\tuxiang\messi.bmp'); %该图片在安装matlab的目录中找I=rgb2gray(I); %将该图片转换为灰度图象I=im2double(I); %图像存储类型转换% T=dctmtx(8); %离散余弦变换矩阵[p,q]=size(I);T = zeros(8,8);for i=0:7for j=0:7if (i==0)T(i+1,j+1)=1/sqrt(8);elseT(i+1,j+1)=sqrt(2/8)*cos(pi*(2*j+1)*i/(2*8));endendendB=blkproc(I,[8 8],'P1*x*P2',T,T'); %对原图像进行DCT变换mask=[1 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0];B2=blkproc(B,[8 8],'P1.*x',mask); %用mask进行数据压缩,丢弃右下角高频数据I2=blkproc(B2,[8 8],'P1*x*P2',T',T);%进行DCT反变换未经量化,得到压缩后的图像tables=[16 11 10 16 24 40 51 6112 12 14 19 26 58 60 5514 13 16 24 40 57 69 5614 17 22 29 51 87 80 6218 22 37 56 68 109 103 7724 35 55 64 81 104 113 9249 64 78 87 103 121 120 10172 92 95 98 112 100 103 99];B3=blkproc(B,[8 8],'x./P1',tables); %系数进行亮度量化I3=blkproc(B3,[8 8],'P1*x*P2',T',T);%进行DCT反变换且经量化,得到压缩后的图像mask1=[1 1 1 1 1 0 0 01 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0];B4=blkproc(B,[8 8],'P1.*x',mask1); %用mask1进行数据压缩,丢弃右下角高频数据I4=blkproc(B4,[8 8],'P1*x*P2',T',T);%进行DCT反变换未经量化,得到压缩后的图像imshow(I)title('原始图像')figure;imshow(B)title('DCT变换后的图像')figure;imshow(B3)title('DCT变换后量化的图像')figure;imshow(I2)title('经mask压缩后的图像')figure;imshow(I3)title('经量化压缩后的图像')figure;imshow(I4)title('经mask1压缩后的图像')%信噪比的计算mse=0; %mseb原图与处理图像的均方误差for i=1:pfor j=1:qa=(I(i,j)-I2(i,j))^2;mse=mse+a;endendmse=mse/(256*256);psnr=(20*log2(255)-10*log2(mse))/log2(10)mse=0; %mseb原图与处理图像的均方误差for i=1:pfor j=1:qa=(I(i,j)-I3(i,j))^2;mse=mse+a;endendmse=mse/(256*256);psnr1=(20*log2(255)-10*log2(mse))/log2(10)mse=0; %mseb原图与处理图像的均方误差for i=1:pfor j=1:qa=(I(i,j)-I4(i,j))^2;mse=mse+a;endendmse=mse/(256*256);psnr2=(20*log2(255)-10*log2(mse))/log2(10)toc。
最新图像增强、图像滤波、边缘检测的MATLAB实现
最新图像增强、图像滤波、边缘检测的MATLAB实现图像增强、图像滤波、边缘检测的M A T L A B实现图像增强、图像滤波及图像边缘检测MATLAB实现程序图像增强图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。
其主要目的是使处理后的图像对某些特定的应用比原来的图像更加有效。
图像增强技术主要包含直方图修改处理、图像平滑化处理、图像尖锐化处理、和彩色处理技术等。
图像增强有图像对比度增强、亮度增强,轮廓增强等等。
下面利用直方图统计算法对灰度图像进行增强:程序代码:I=imread('cameraman.tif');subplot(121)imshow(I);title('原始图像');subplot(122)imhist(I,64)%绘制图像的直方图,n=64为灰度图像灰度级,若I为灰度图像,默认n=256;若I为二值图像,默认n=2。
title('图像的直方图');(请自己运行查看)n=256时:(请自己运行查看)下面利用直方图均衡化增强图像的对比度:I=imread('cameraman.tif');J=histeq(I);%将灰度图像转换成具有64(默认)个离散灰度级的灰度图像imshow(I)title('原始图像')figure,imshow(J)title('直方图均衡化后的图像')figure(1)subplot(121);imhist(I,64)title('原始图像的直方图')subplot(122);imhist(J,64)title('均衡化的直方图')(请自己运行查看)分析:从上图中可以看出,用直方图均衡化后,图像的直方图的灰度间隔被拉大了,均衡化的图像的一些细节显示了出来,这有利于图像的分析和识别。
直方图均衡化就是通过变换函数histeq将原图的直方图调整为具有“平坦”倾向的直方图,然后用均衡直方图校正图像。
matlab边缘检测步骤 -回复
matlab边缘检测步骤-回复Matlab边缘检测步骤边缘检测是计算机视觉和图像处理中常用的技术之一,它可以识别图像中不同区域之间的边界和轮廓。
边缘检测对于图像分割、物体识别和目标跟踪等应用非常重要。
Matlab作为一种强大的计算软件和编程语言,提供了一系列用于边缘检测的函数和工具。
在本文中,我们将逐步介绍Matlab 中进行边缘检测的步骤。
步骤一:读取图像首先,我们需要读取待处理的图像。
在Matlab中,可以使用imread函数来读取图像,并将其存储在一个变量中。
例如,下面的代码可以读取名为"image.jpg"的图像:image = imread('image.jpg');步骤二:灰度化在进行边缘检测之前,通常需要将彩色图像转换为灰度图像。
灰度图像只包含亮度信息,而不包含颜色信息,这样可以简化边缘检测的计算。
在Matlab中,可以使用rgb2gray函数将彩色图像转换为灰度图像。
下面的代码可以将前面读取的彩色图像转换为灰度图像:grayImage = rgb2gray(image);步骤三:滤波在进行边缘检测之前,通常需要对图像进行滤波,以平滑图像并去除噪声。
在Matlab中,有许多滤波器可以使用,例如高斯滤波器和中值滤波器。
可以使用imfilter函数来应用这些滤波器。
下面的代码可以将前一步得到的灰度图像应用高斯滤波器来平滑图像:filteredImage = imfilter(grayImage, fspecial('gaussian'));步骤四:计算梯度接下来,我们需要计算图像中每个像素的梯度。
梯度表示图像中像素灰度变化的方向和强度。
在Matlab中,可以使用gradient函数来计算梯度。
下面的代码可以计算前一步得到的滤波后图像的梯度:[gradX, gradY] = gradient(filteredImage);这里,gradX和gradY分别表示沿x和y轴方向的梯度。
matlab程序的高斯谐波小波滤波的实现-概述说明以及解释
matlab程序的高斯谐波小波滤波的实现-概述说明以及解释1.引言1.1 概述概述:在数字图像处理领域,滤波是一种常用的图像增强技术,旨在消除图像中的噪声,并凸显图像中的细节和特征。
高斯谐波小波滤波是一种有效的滤波方法,通过结合高斯滤波、谐波滤波和小波变换技术,能够在保持图像细节的同时有效地去除噪声。
本文将介绍如何利用Matlab编程实现高斯谐波小波滤波,包括原理、实现步骤以及实现效果评估等内容。
通过本文的学习,读者将能够了解该滤波方法的优势和应用前景,为进一步的图像处理工作提供参考和指导。
1.2 文章结构本文主要分为引言、正文和结论三个部分。
在引言部分中,我们将介绍本文的概述,包括高斯谐波小波滤波的背景和意义,引出文章的主要内容。
同时,我们还会说明文章的结构,分析每个部分的主要内容和目标。
在正文部分中,我们将首先介绍Matlab程序的基本信息,包括程序的功能和特点。
然后,我们将详细解释高斯谐波小波滤波的原理,包括其工作原理和优势。
最后,我们将详细阐述实现这一滤波方法的步骤,以便读者能够清楚地了解如何在Matlab中实现高斯谐波小波滤波。
在结论部分,我们将对实现效果进行评估,分析该滤波方法的优点和不足。
同时,我们还将展望该方法在未来的应用前景,总结全文的主要内容,为读者提供一个全面的结论。
1.3 目的本文的目的是介绍利用Matlab程序实现高斯谐波小波滤波的方法。
通过详细介绍高斯谐波小波滤波的原理和实现步骤,读者可以了解这种滤波方法的具体操作步骤和实现过程。
同时,通过对实现效果的评估和应用前景的展望,希望读者能够深入了解高斯谐波小波滤波在信号处理中的作用和价值,以及它在实际应用中的潜力和优势。
最终,通过总结本文的内容,读者能够对高斯谐波小波滤波有一个全面的认识,并能够运用Matlab 程序进行相关领域的研究和应用。
2.正文2.1 Matlab程序介绍Matlab是一种强大的数学软件,广泛应用于科学计算、数据分析和图形绘制等领域。
