图像处理matlab汇总_精通matlab数字图像处理与识别 matlab - CSDN
  • 数字图像处理Matlab常用图像处理函数汇总

    万次阅读 多人点赞 2016-08-06 22:01:34
    原文地址:Matlab图像处理函数汇总 作者:mimi 图像的变换  ① fft2:fft2函数用于数字图像的二维傅立叶变换,如:i=imread('104_8.tif'); j=fft2(i); ②ifft2::ifft2函数用于数字图像的二维傅立叶反变换,如...
    
    
    作者:mimi

    图像的变换 

    ① fft2:fft2函数用于数字图像的二维傅立叶变换,如:i=imread('104_8.tif');

    j=fft2(i);

    ②ifft2::ifft2函数用于数字图像的二维傅立叶反变换,如:

     i=imread('104_8.tif');

     j=fft2(i);

     k=ifft2(j);


    噪声生成函数

    ① 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');%均值滤波器

     

    图像的增强

    ①直方图: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;

     

    图像边缘检测

    ①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)

     

    形态学图像处理

    ①膨胀:是在二值化图像中“加长”或“变粗”的操作,函数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(...) colorbar(...,'peer',axes_handle)

    getimage 从坐标轴取得图像数据

    语法:A=getimage(h) [x,y,A]=getimage(h) [...,A,flag]=getimage(h) [...]=getimage


    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(...)


    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 yon 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(...,'BackgroundColor',BG) (PNG only) [A,map,alpha] =imread(...) (ICO,CUR,PNG only)


    imwrite  把图像写入(保存)图像文件中

    语法:imwrite(A,filename,fmt) imwrite(X,map,filename,fmt) imwrite(...,filename) imwite(...,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]=imcrop(...)


    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=impixel(X,map,c,r) P=impixel(RGB,c,r) [c,r,P]=impixel(...) P=impixel(x,y,I,xi,yi) P=impixel(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,cy,c]=improfile(...) [cx,cy,c,xi,yi]=improfile(...) [...]=improfile(x,y,I,xi,yi)   [...]=improfile(x,y,I,xi,yi,n) [...]=improfile(...,method)


    mean2 计算矩阵元素的平均值

    语法:B=mean2(A)


    pixval  显示图像像素信息

    语法:pixval on


    std2 计算矩阵元素的标准偏移

    语法:b=std2(A)

     

    四、图像分析函数:

    edge 图像边缘检测

    语法:BW=edge(I,'sobel') BW=edge(I,'sobel',thresh) BW=edge(I,'sobel',thresh,direction) [BW,thresh]=edge(I,'sobel',...) BW=edge(I,'prewitt') BW=edge(I,'prewitt',thresh) 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) BW=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=imadjust(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(...,padopt)

    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(...,'meshgrid') 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,f2]) [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=bwfill(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,yi) [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]=cmunique(I)

    imapprox 对索引图像进行近似处理

    语法:[Y,newmap]=imapprox(X,map,n)   [Y,newmap]=imapprox(X,map,tol) Y=imapprox(X,map,newmap) [...]=imapprox(...,dither_option)

    rgbplot 划分颜色映像表

    语法:rgbplot(cmap)

     

    十三、颜色空间转换函数

    hsv2rgb 转换HSV值为RGB颜色空间:M=hsv2rgb(H)

    ntsc2rgb 转换NTSC值为RGB颜色空间:rgbmap=ntsc2rgb(yiqmap) RGB=ntsc2rgb(YIQ)

    rgb2hsv 转换RGB值为HSV颜色空间:cmap=rgb2hsv(M)

    rgb2ntsc 转换RGB值为NTSC颜色空间:yiqmap=rgb2ntsc(rgbmap) YIQ=rgb2ntsc(RGB)

    rgb2ycbcr 转换RGB值为YCbCr颜色空间:ycbcrmap=rgb2ycbcr(rgbmap) YCBCR=rgb2ycbcr(RGB)

    ycbcr2rgb 转化YCbCr值为RGB颜色空间:rgbmap=ycbcr2rgb(ycbcrmap) RGB=ycbcr2rgb(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=im2double(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,'indexed')

    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,CONN,options) [BW,CONN,options] [BL]=bwboundaries(...) [BLNA]=bwboundaries()

    bwtraceboundary 描述二进制图像中的物体

    B=bwtraceboundary(BW,P,fstep) B=bwtraceboundary(BW,P,fstep,CONN) B=bwtraceboundary(...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]=getpts

    getrect 用鼠标选择矩阵

    语法: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 all

    ippl 检查IPPL的存在

    语法:TF=ippl [TF B]=ippl

    iptdemos 显示图像处理工具箱中的索引图像

    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进制。

    语法:xyzd=xyz2double(XYZ) xyz16=xyz2unit16(xyz)

    展开全文
  • 数字图像处理MATLAB

    千次阅读 2020-06-21 23:02:35
    数字图像处理MATLAB版)课程设计汇总(含源码、课设报告) 题目一、规范证件照 将各种不规范的二寸照,归一化为蓝色背景的标准二寸照。有部分数据。 题目二、三维人脸识别 题目三、表情识别 题目四、学生交头接耳...

    数字图像处理(MATLAB版)课程设计汇总

    题目一、规范证件照

    将各种不规范的二寸照,归一化为蓝色背景的标准二寸照。有部分数据。

    题目二、三维人脸识别

    题目三、表情识别

    题目四、学生交头接耳行为检测

    实现教室中学生之间交头接耳动作的识别。自制视频,摄像头在黑板上方。

    题目五、学生递东西行为检测

    实现递纸条、笔、尺子、橡皮等物品的识别

    题目六、学生抬头率检测

    题目七、前排就座率检测

    题目八、学生喜好度、参与度、专注度检测

    题目九、车牌识别

    包含新能源号牌、港澳车牌、无号牌;包含车牌颜色(蓝、黄、白、黑、绿、其他)

    题目十、车内挂件识别

    有无挂件,挂件尺寸、颜色

    题目十一、车辆颜色识别

    题目十二、 安全带识别

    主驾或副驾有无人、是否系安全带

    题目十三、 路边停车检测

    题目十四、 车辆碰撞行为识别

    题目十五、道路识别

    自动识别图像中的道路

    题目十六、 交通图像处理系统

    展开全文
  • Matlab图像处理函数汇总

    千次阅读 2015-12-26 11:21:35
    Matlab图像处理函数汇总: 图像的变换, 模拟噪声生成函数和预定义滤波器, 图像的增强, 图像边缘检测, 形态学图像处理, 改变MATLAB背景颜色, 小波变换.

                     Matlab图像处理函数汇总

    1.图像的变换:

       ① fft2:fft2函数用于数字图像的二维傅立叶变换,如:
         i=imread('104_8.tif');
         j=fft2(i);</span>

       ② ifft2: ifft2函数用于数字图像的二维傅立叶反变换,如:

         i=imread('104_8.tif');
         j=fft2(i);
         k=ifft2(j);</span>

    2.模拟噪声生成函数和预定义滤波器:

       ① imnoise:用于对图像生成模拟噪声,如:

         i=imread('104_8.tif');
         j=imnoise(i,'gaussian',0,0.02); %模拟高斯噪声</span>

       ② fspecial:用于产生预定义滤波器,如:

         h=fspecial('sobel');     %sobel水平边缘增强滤波器
         h=fspecial('gaussian');   %高斯低通滤波器
         h=fspecial('laplacian');   %拉普拉斯滤波器
         h=fspecial('log');         %高斯拉普拉斯(LoG)滤波器
         h=fspecial('average');     %均值滤波器</span>

    3.图像的增强:

       ①直方图:imhist函数用于数字图像的直方图显示,如:

        i=imread('104_8.tif');
        imhist(i);</span>

       ②直方图均化:histeq函数用于数字图像的直方图均化,如:

         i=imread('104_8.tif');
         j=histeq(i);</span>

       ③对比度调整:imadjust函数用于数字图像的对比度调整,如:

              i=imread('104_8.tif');
              j=imadjust(i,[0.3,0.7],[]);</span></span>

       ④对数变换:log函数用于数字图像的对数变换,如:

         i=imread('104_8.tif');
         j=double(i);
         k=log(j);</span>

       ⑤基于卷积的图像滤波函数:filter2函数用于图像滤波,如:

         i=imread('104_8.tif');
         h=[1,2,1;0,0,0;-1,-2,-1];
         j=filter2(h,i);</span>

       ⑥线性滤波:利用二维卷积conv2滤波, 如:

          i=imread('104_8.tif');
          h=[1,1,1;1,1,1;1,1,1];
          h=h/9;
          j=conv2(i,h);</span>
       ⑦中值滤波:medfilt2函数用于图像的中值滤波,如:

         i=imread('104_8.tif');
         j=medfilt2(i);</span>

       ⑧锐化

       (1)利用Sobel算子锐化图像, 如:

        i=imread('104_8.tif');
        h=[1,2,1;0,0,0;-1,-2,-1];   %Sobel算子
        j=filter2(h,i);</span>
       (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;</span>

    4.图像边缘检测:

       ① sobel算子 如:

        i = imread('104_8.tif');
        j = edge(i,'sobel',thresh);</span>
       ② prewitt算子 如:

        i = imread('104_8.tif');
        j = edge(i,'prewitt',thresh);</span>
       ③roberts算子  如:

        i=imread('104_8.tif');
        j =edge(i,'roberts',thresh);</span>

       ④log算子  如:

       i=imread('104_8.tif');
        j =edge(i,'log',thresh);</span>

       ⑤canny算子 如:

        i=imread('104_8.tif');
        j =edge(i,'canny',thresh);</span>

       ⑥Zero-Cross算子 如:

        i=imread('104_8.tif');
        j =edge(i,'zerocross',thresh);</span>

    5.形态学图像处理:

       ①膨胀:是在二值化图像中“加长”或“变粗”的操作,函数imdilate执行膨胀运算,如:

        a=imread('104_7.tif');  %输入二值图像
        b=[0 1 0;1 1 1;01 0];
        c=imdilate(a,b);</span>
         ②腐蚀:函数imerode执行腐蚀,如:

        a=imread('104_7.tif');   %输入二值图像
        b=strel('disk',1);
        c=imerode(a,b);</span>

       ③开运算:先腐蚀后膨胀称为开运算,用imopen来实现,如:

       a=imread('104_8.tif');
       b=strel('square',2);
       c=imopen(a,b);</span>

       ④闭运算:先膨胀后腐蚀称为闭运算,用imclose来实现,如:

       a=imread('104_8.tif');
        b=strel('square',2);
        c=imclose(a,b);</span>

    6.改变MATLAB背景颜色:

    % 不使用MATLAB首选项中的配色
    com.mathworks.services.Prefs.setBooleanPref('ColorsUseSystem',0);
    % 指定背景颜色
    com.mathworks.services.Prefs.setColorPref('ColorsBackground',java.awt.Color.green);
    com.mathworks.services.ColorPrefs.notifyColorListeners('ColorsBackground');
    cmdWinDoc = com.mathworks.mde.cmdwin.CmdWinDocument.getInstance;
    listeners = cmdWinDoc.getDocumentListeners;
    ii=1;
    % 循环的方式,找到jTextArea的实例,然后设置颜色
    while true
        jTextArea = listeners(ii);
        if isa(jTextArea,'javax.swing.JTextArea$AccessibleJTextArea')
            break
        end
        ii=ii+1;
    end
    % 可以使用下面任意一种方法设置背景色
    jTextArea.setBackground(java.awt.Color.green);
    jTextArea.setBackground(java.awt.Color(0,1,0));
    set(jTextArea,'Background','green');
    set(jTextArea,'Background',[0,1,0]);</span>

    7.小波变换:

       ① 使用小波工具箱:

        wfilters:得到分解滤波器;

        wavedec2:分解等级函数,得到变换系数;

        waverec2:得到重构滤波器。

       ② 不使用小波工具箱:

        wavefiler:代替wfilters;

        wavefast:代替wavedec2;

        wavework:处理C(有三个使用wavework功能类似函数:wavecut,wavecopy,wavepaste);

        wave2gray:显示变换系数;

        waveback:代替waverec2。



    展开全文
  • Matlab遥感数字图像处理函数汇总

    Matlab遥感数字图像处理函数汇总

    遥感数字图像处理
    是通过计算机图像处理系统
    对遥感图像中的像素进行的系列操作过程。

    (以下函数均针对每一个波段分开进行处理,如需综合处理,用reshape函数将图像矩阵转换成 向量(行×列×波段数) 即可)

    温馨提示:‘文章有点长,可按目录定位!’

    1 图像读取

    1.1 读取遥感影像hdr格式头文件

    function  parameter =HDR_Read(HDRfilename)
    %设置函数HDR_Read,返回值为parameter,参数为HDRfilename
    fileID = fopen(HDRfilename, 'r');  %以只读方式打开.hdr头文件
        
    %一直读取头文件的内容直至文件末尾
    while ~feof(fileID)
         fileline=fgetl(fileID);
         C = cellstr(strsplit(fileline,'= '));     %"="分割每一行   
         if(C(1)=="samples ")  
             samples=str2double(cell2mat(C(2)));   %存储列数samples
         end
         if(C(1)=="lines   ")       
             lines=str2double(cell2mat(C(2)));     %存储行数lines
         end
         if(C(1)=="bands   ")                      %存储波段数bands
             bands=str2double(cell2mat(C(2)));
         end
         if(C(1)=="interleave ")                   %存储envi中数据存储方式
             interleave=cell2mat(C(2));
         end  
          if(C(1)=="data type ")                   %存储数据类型
             datatype=cell2mat(C(2));
         end       
    end
     fclose(fileID);     %关闭文件的读取
    
     %定义ENVI中的数据类型格式
     data_type = {'uint8' 'int16' 'int32' 'float32' 'float64' 'uint16' 'uint32' 'uint64'};
     
     %将envi中不同的数据格式转换成matlab中的特定格式
     switch datatype
        case '1'
            datatype = cell2mat(data_type(1));    %灰度范围0-255
        case '2'
            datatype = cell2mat(data_type(2));    %16位整数
        case '3'
            datatype = cell2mat(data_type(3));    %32位整数
        case '4'
            datatype = cell2mat(data_type(4));    %32位浮点数
        case '5'
            datatype = cell2mat(data_type(5));    %64位浮点数
        case '6'
            datatype = cell2mat(data_type(6));    %灰度范围0-2^16
        case '7'
            datatype = cell2mat(data_type(7));    %灰度范围0-2^32
        case '8'
            datatype = cell2mat(data_type(8));    %灰度范围0-2^64
     end
     
     %将各数据存入返回值参数parameter中
     parameter = {samples,lines,bands,interleave,datatype};
    end
    

    1.2 读取img格式或dat格式的遥感图像

    function Re=IMG_Read(IMGfilename)
    HDRfilename =strcat(strtok(IMGfilename,'.'),'.hdr'); %得到相同名字的头文件
    parameter = HDR_Read(HDRfilename);  %读取头文件中的参数信息
    samples = cell2mat(parameter(1));    %得到列数
    lines = cell2mat(parameter(2));      %得到行数
    bands = cell2mat(parameter(3));      %获得波段数
    interleave = cell2mat(parameter(4)); %获得图像存储格式
    datatype = cell2mat(parameter(5));   %获取数据格式
    
    fid = fopen(IMGfilename, 'r');      %以只读方式打开img文件
    Image=fread(fid,datatype);           %按指定格式读取img图像文件
    
    %针对不同的图像存储格式,处理的到图像矩阵
    switch interleave    
        case  'bsq'     %当存储格式为bsq时,按波段存储
            Image=reshape(Image,[samples,lines,bands]);%将图像读入三维矩阵
            for i=1:bands
                IMG(:,:,i)=Image(:,:,i)';
            end
            Image=IMG;
        case 'bil'     %当存储格式为bil时,按行存储
            IMG=zeros(lines,samples,bands);
            count=1;
            for row =1:lines
                for i=1:bands       
                   IMG(row,:,i) =Image((count-1)*samples+1:count*samples);
                   count=count+1;
                end
            end
            Image=IMG;
        case 'bip'     %当存储格式为bip时,按像元存储
            IMG=zeros(lines,samples,bands);
            count=1;
            for row=1:lines
                for col=1:samples
                    IMG(row,col,:)=Image((count-1)*bands+1:count*bands);
                    count=count+1;
                end
            end 
            Image=IMG;
        otherwise
            error('格式错误,无法读取图像!');
    end
    
    Re = {samples,lines,bands,datatype,Image};
    fclose(fid);
    
    subplot(2,2,1);
    imgmul=cat(3,Image(:,:,3),Image(:,:,2),Image(:,:,1));%合成3维矩阵
    colormap(colorcube);
    imshow(uint8(imgmul));
    colorbar;
    title('前三个波段组合图像');
    
    subplot(2,2,2);
    img1=Image(:,:,1);
    colormap(gray);
    imshow(uint8(img1));
    colorbar;
    title('第一个波段灰度图');
     
    subplot(2,2,3);
    img2=Image(:,:,2);
    colormap(gray);
    imshow(uint8(img2))
    colorbar;
    title('第二个波段灰度图');
    
    subplot(2,2,4);
    img3=Image(:,:,3);
    colormap(gray);
    imshow(uint8(img3))
    colorbar;
    title('第三个波段灰度图');
    % axis off;  
    

    2 图像统计与描述

    2.1 图像均值函数

    %函数名称为Image_Mean,输入参数Image,输出参数Mean
    function [Mean] = Image_Mean(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %将三维矩阵转换成二维矩阵,方便计算
    Image1 = reshape(Image,[m*n,bands]);
    %初始化求和矩阵
    Sum = zeros(bands,1);
    %计算每个波段所有像元的灰度之和
    for k = 1:bands
        for i = 1:m*n
         Sum(k) = Sum(k) + Image1(i,k);   
        end
    end
    %计算每个波段的灰度平均值
    Mean = Sum /(m*n); 
    end
    

    2.2 图像中值函数

    %函数名称为Image_Median,输入参数Image,输出参数Median
    function [Median] = Image_Median(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %将三维矩阵转换成二维矩阵,方便计算
    Image1 = reshape(Image,[m*n,bands]);
    %对每一个波段进行冒泡排序
    for k = 1:bands
    	for i = 1:m*n
            for j = 1:m*n-i
                if(Image1(j,k)>Image1(j+1,k))
                    temp = Image1(j,k);
                    Image1(j,k) = Image1(j+1,k);
                    Image1(j+1,k) = temp;
                end
            end
        end
    end
    %去排序后每个波段中间值作为中值
    for k = 1:bands
        if(mod(m*n,2) == 0)
            Median(k) = Image1(m*n/2,k)/2 + Image1(m*n/2+1,k)/2;
        else
            Median(k) = Image1(m*n/2+1,k);
        end
    end
    end
    

    2.3 图像累计直方图函数

    %函数名称为Image_Hist,输入参数Image,输出参数Hist
    function [Hist] = Image_Hist(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %将三维矩阵转换成二维矩阵,方便计算
    Image1 = reshape(Image,[m*n,bands]);
    %初始化三维矩阵,行表示256种灰度,列表示灰度值、个数、累计个数
    Hist = zeros(256,2,bands);
    %求每个波段中每个灰度值的个数
    for k = 1:bands
        for i = 1:256
            for j = 1:m*n
                if(Image1(j,k) == i-1)
                    Hist(i,1,k) = Hist(i,1,k) + 1;
                end
            end
        end
    end
    %转换为频率直方图
    Hist = Hist./(m*n);
    %求每个波段每个灰度的累计个数
    Hist(1,2,:) = Hist(1,1,:);
    for k = 1:bands
        for i = 2:256
            Hist(i,2,k) = Hist(i-1,2,k) + Hist(i,1,k);
        end
    end
    end
    

    2.4 图像众数函数

    %函数名称为Image_Mode,输入参数Image,输出参数Mode
    function [Mode] = Image_Mode(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %将三维矩阵转换成二维矩阵,方便计算
    Image1 = reshape(Image,[m*n,bands]);
    %计算直方图矩阵
    Hist = Image_Hist(Image);
    %另初始最大个数为0
    Max = 0 ;
    %初始众数矩阵,每一行是一个波段的众数
    Mode = zeros(bands,1);
    %计算每个波段灰度值的众数
    for k = 1:bands
    	for i = 1:256
    		if(Hist(i,1,k)>Max)
    			Max = Hist(i,1,k);
    			Mode(k) = i-1;
    		end
    	end
    end
    end
    

    2.5 图像的协方差矩阵

    %函数名称为Image_Cov,输入参数Image,输出参数Cov
    function [Cov] = Image_Cov(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %将三维矩阵转换成二维矩阵,方便计算
    %只有三个波段的情况下
    Image1 = reshape(Image(:,:,1),[m*n,1]);
    Image2 = reshape(Image(:,:,2),[m*n,1]);
    Image3 = reshape(Image(:,:,3),[m*n,1]);
    IM = [Image1;Image2;Image3];
    %求每一个波段灰度值的均值
    Mean = Image_Mean(Image);
    %初始化协方差矩阵
    Cov = zeros(bands);
    %计算协方差矩阵
    for i = 1:bands
        for j = 1:bands
            for k = 1:m*n
                Cov(i,j) = Cov(i,j)+(IM(i,k)-Mean(i))*(IM(j,k)-Mean(k)) ; 
            end
            Cov(i,j) = Cov(i,j);
        end
    end
    end
    

    2.6 图像的相关系数矩阵

    %函数名称为Image_R,输入参数Image,输出参数R
    function [R] = Image_R(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %计算协方差矩阵
    Cov = Image_Cov(Image);
    %初始化相关系数矩阵
    R = zeros(bands);
    %计算相关系数
    for i = 1:bands
        for j = 1:bands
            R = Cov(i,j)/(sqrt(Cov(i,i))*sqrt(Cov(j,j)));
        end
    end
    end
    

    3 图像增强处理

    3.1 直方图线性拉伸

    %函数名称为Image_LinearStretch,输入参数Image,输出参数IMAGE
    function [IMAGE] = Image_LinearStretch(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %初始化计算矩阵
    Image1 = reshape(Image,[m*n,bands]);
    %计算每个波段灰度的最大最小值
    for k = 1:bands
        Max(k,1) = max(max(Image(:,:,k)));
        Min(k,1) = min(min(Image(:,:,k)));
    end
    %线性拉伸
    for k = 1:bands
        for i = 1:m*n
            Image1(i,k) = (Image1(i,k)-Min(k))*255/(Max(k)-Min(k)) + 0;
        end
    end
    %将二维矩阵转换为三维矩阵
    IMAGE = reshape(Image1,[m,n,bands]);
    %画图,左右分别表示原图和处理后的图像
    figure(1);
    subplot(1,2,1);
    imshow(uint8(Image));
    title('原始图像');
    subplot(1,2,2);
    imshow(uint8(IMAGE));
    title('线性拉伸后的图像');
    end
    

    3.2 直方图均衡化

    %函数名称为Image_HistogramEqualization,输入参数Image,输出参数IMAGE
    function [IMAGE] = Image_HistogramEqualization(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %初始化计算矩阵
    IMAGE = Image;
    %计算图像的直方图矩阵
    Hist = Image_Hist(Image);
    %建立灰度映射函数
    for k = 1:bands
        for i = 1:256
            P(i,k) = round(255* Hist(i,2,k));
        end
    end
    %计算直方图均衡化后的矩阵
    for k = 1:bands
       for i = 1:m
           for j = 1:n
               IMAGE(i,j,k) = P(IMAGE(i,j,k)+1,k);
           end
       end
    end
    %画图,左右分别表示原图和处理后的图像
    figure(1);
    subplot(1,2,1);
    imshow(uint8(Image));
    title('原始图像');
    subplot(1,2,2);
    imshow(uint8(IMAGE));
    title('直方图均衡化后的图像')
    end
    

    3.3 直方图匹配

    %函数名称为Image_HistogramMatching,输入参数Image1,Image2,输出参数IMAGE
    function [IMAGE] = Image_HistogramMatching(Image1,Image2)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image1);
    %初始化计算矩阵
    IMAGE = Image1;
    %计算图像的直方图矩阵
    Hist1 = Image_Hist(Image1);
    Hist2 = Image_Hist(Image2);
    %建立灰度映射函数
    for k = 1:bands
        for i = 1:256
            [vv,index] = min(abs(Hist1(i,2,k)-Hist2(:,2,k)));
            P(i,k) = index -1;
        end
    end
    %计算直方图均衡化后的矩阵
    for k = 1:bands
       for i = 1:m
           for j = 1:n
               IMAGE(i,j,k) = P(IMAGE(i,j,k)+1,k);
           end
       end
    end
    %画图
    figure(1);
    subplot(1,3,1);
    imshow(uint8(Image1));
    title('原始图像');
    subplot(1,3,2);
    imshow(uint8(Image2));
    title('参照图像');
    subplot(1,3,3);
    imshow(uint8(IMAGE));
    title('直方图匹配化后的图像')
    end
    

    3.4 中值滤波

    %函数名称为Image_MedianFilter,输入参数Image,输出参数IMAGE
    function [IMAGE] = Image_MedianFilter(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %加高斯噪声
    Image1 = imnoise(uint8(Image),'gaussian');
    %初始化矩阵
    IMAGE = Image1;
    %定义模板大小,假设模板大小3×3
    A = 1;
    %中值滤波
    for k = 1:bands
        for i = 1+A:m-A
            for j = 1+A:n-A
                temp = Image1(i-A:i+A,j-A:j+A,k);
               IMAGE(i,j,k) = round(median(median(temp)));
            end
        end
    end
    %画图
    figure(1);
    subplot(1,3,1);
    imshow(uint8(Image));
    title('原始图像');
    subplot(1,3,2);
    imshow(uint8(Image1));
    title('加噪声以后的图像');
    subplot(1,3,3);
    imshow(uint8(IMAGE));
    title('中值滤波后的图像')
    end
    

    3.5 均值滤波

    %函数名称为Image_Mean,输入参数Image,输出参数IMAGE
    function [IMAGE] = Image_Mean(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %加高斯噪声
    Image1 = imnoise(uint8(Image),'gaussian');
    %定义模板大小,假设模板大小3×3
    A = 1;
    %初始化矩阵
    IMAGE = Image1;
    %均值滤波
    for k = 1:bands
        for i = 1+A:m-A
            for j = 1+A:n-A
                temp = Image1(i-A:i+A,j-A:j+A,k);
               IMAGE(i,j,k) = round(mean(mean(temp)));
            end
        end
    end
    %画图
    figure(1);
    subplot(1,3,1);
    imshow(uint8(Image));
    title('原始图像');
    subplot(1,3,2);
    imshow(uint8(Image1));
    title('加噪声以后的图像');
    subplot(1,3,3);
    imshow(uint8(IMAGE));
    title('均值滤波后的图像')
    end
    

    3.6 Sobel算子锐化

    %函数名称为Image_Sobel,输入参数Image,输出参数IMAGE
    function [IMAGE] = Image_Sobel(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %定义模板大小,假设模板大小3×3
    A = 1;
    %定义Sobel算子x,y方向矩阵
    Sobelx = [-1 -2 -1;0 0 0;1 2 1];
    Sobely = [-1 0 1;-2 0 2;-1 0 1];
    %初始化矩阵
    Image1 = zeros(m,n,bands);
    IMAGE = Image;
    %Sobel算子
    for k = 1:bands
        for i = 1+A:m-A
            for j = 1+A:n-A
                temp = Image(i-A:i+A,j-A:j+A,k);
               	Image1(i,j,k) = abs(sum(sum(Sobelx.*temp)))+abs(sum(sum(Sobely.*temp)));
            end
        end
    end
    IMAGE = Image + Image1;
    %画图,左右分别表示原图和两幅处理后的图像
    figure(1);
    subplot(1,3,1);
    imshow(uint8(Image));
    title('原始图像');
    subplot(1,3,2);
    imshow(uint8(Image1));
    title('边缘提取图像');
    subplot(1,3,3);
    imshow(uint8(IMAGE));
    title('Sobel算子锐化后的图像')
    end
    

    3.7 Prewitt算子锐化

    %函数名称为Image_Prewitt,输入参数Image,输出参数IMAGE
    function [IMAGE] = Image_Prewitt(Image)
    %获取矩阵的行、列、波段数
    [m,n,bands] = size(Image);
    %定义模板大小,假设模板大小3×3
    A = 1;
    %定义Prewitt算子x,y方向矩阵
    Prewittx = [-1 -2 -1;0 0 0;1 2 1];
    Prewitty = [-1 0 1;-2 0 2;-1 0 1];
    %初始化矩阵
    Image1 = zeros(m,n,bands);
    IMAGE = Image;
    %Sobel算子
    for k = 1:bands
        for i = 1+A:m-A
            for j = 1+A:n-A
                temp = Image(i-A:i+A,j-A:j+A,k);
               	Image1(i,j,k) = abs(sum(sum(Prewittx.*temp)))+abs(sum(sum(Prewitty.*temp)));
            end
        end
    end
    IMAGE = Image + Image1;
    %画图,左中右分别表示原图和两幅处理后的图像
    figure(1);
    subplot(1,3,1);
    imshow(uint8(Image));
    title('原始图像');
    subplot(1,3,2);
    imshow(uint8(Image1));
    title('边缘提取图像');
    subplot(1,3,3);
    imshow(uint8(IMAGE));
    title('Prewitt锐化后的图像')
    end
    

    3.8 RGB to HSI

    %函数名称为Image_RGB2HSI,输入参数Image,输出参数HSI
    function HSI = Image_RGB2HSI(Image)
    %RGB->HSI变换
    [lines,samples,bands] = size(Image);
    HSI = zeros(lines,samples,3); %用三维向量分别存储HSI(色度,饱和度,亮度)
    for i = 1:lines
        for j = 1:samples
            if( Image(i,j,1)== Image(i,j,2) && Image(i,j,2) ==Image(i,j,3))
                JD = 0;
            else
            JD = 180*acos((2*Image(i,j,1)-Image(i,j,2)-Image(i,j,3))/(2*((Image(i,j,1)-Image(i,j,2))^2+(Image(i,j,1)-Image(i,j,3))*(Image(i,j,2)-Image(i,j,3)))^0.5))/pi;
            end
            %求H色度
            if(Image(i,j,2)>=Image(i,j,3))
                HSI(i,j,1) = JD;
            else
                HSI(i,j,1) = 360 - JD;
            end
            %求S饱和度
            HSI(i,j,2) = 1-3*min(min(Image(i,j,1),Image(i,j,2)),Image(i,j,3))/(Image(i,j,1)+Image(i,j,2)+Image(i,j,3));
            %求I亮度
            HSI(i,j,3) = (Image(i,j,1)+Image(i,j,2)+Image(i,j,3))/3;
        end
    end
    %画图
    figure(1);
    subplot(1,2,1);
    imshow(uint8(Image));
    title('RGB图像')
    subplot(1,2,2);
    imshow(uint8(HSI));
    title('HSI图像');
    end
    

    3.9 HSI to RGB

    %函数名称为Image_HSI2RGB,输入参数Image,输出参数HSI
    function Image = Image_HSI2RGB(HSI)
    %HSI->RGB变换
    [lines,samples] = size(HSI(:,:,1));
    Image = zeros(lines,samples,3);
    for i = 1:lines
        for j = 1:samples
            if(HSI(i,j,1)>=0 && HSI(i,j,1)<120)
                Image(i,j,3) = round(HSI(i,j,3)*(1-HSI(i,j,2)));
                Image(i,j,1) = round(HSI(i,j,3)*(1+HSI(i,j,2)*cos(pi*HSI(i,j,1)/180)/cos(pi*(60-HSI(i,j,1))/180)));
                Image(i,j,2) = round(3*HSI(i,j,3)- Image(i,j,1)-Image(i,j,3));            
            end
        
            if(HSI(i,j,1)>=120 && HSI(i,j,1)<240)
                Image(i,j,1) = round(HSI(i,j,3)*(1-HSI(i,j,2)));
                Image(i,j,2) = round(HSI(i,j,3)*(1+HSI(i,j,2)*cos(pi*(HSI(i,j,1)-120)/180)/cos(pi*(180-HSI(i,j,1))/180)));
                Image(i,j,3) = round(3*HSI(i,j,3)- Image(i,j,1)- Image(i,j,2));          
            end
            
            if(HSI(i,j,1)>=240 && HSI(i,j,1)<360)
                Image(i,j,2) = round(HSI(i,j,3)*(1-HSI(i,j,2)));
                Image(i,j,3) = round(HSI(i,j,3)*(1+HSI(i,j,2)*cos(pi*(HSI(i,j,1)-240)/180)/cos(pi*(360-HSI(i,j,1))/180)));          
                Image(i,j,1) = round(3*HSI(i,j,3)- Image(i,j,2)- Image(i,j,3));
            end
        end
    end
    %画图
    figure(1);
    subplot(1,2,1);
    imshow(uint8(HSI));
    title('HSI图像');
    subplot(1,2,2);
    imshow(uint8(Image));
    title('RGB图像')
    end
    

    3.10 PCA变换

    %函数名称为Image_HSI2RGB,输入参数Image,输出参数HSI
    function Y = Image_PCA(Image)
    [lines,samples,bands] = size(Image);
    %PCA(K->L)变换
    JZ = zeros(bands,lines*samples);
    for i = 1:bands
       JZ(i,:) = reshape(Image(:,:,i),[1,lines*samples]); 
    end
    COV = cov(JZ');
    [TZXL,TZZ] = eigs(COV);  %得到特征值和特征向量
    % [TZZ,index] = sort(diag(TZZ),'descend');   %将特征值按降序排列
    % TZXL = TZXL(:,index); %特征值为bands列,特征向量矩阵的每一列代表对应特征值的特征向量
    A = TZXL';
    Y = A * JZ; %Y的每一行代表第n各主成分
    end
    

    4 影像融合处理

    4.1 基于Brovey变换的影像融合

    %函数名称为Image_BroveyChange,输入参数Image1,Image2,输出参数Image3
    function Image3 = Image_BroveyChange(Image1,Image2);
    %Image1表示多光谱图像
    [lines1,samples1,bands1] = size(Image1);
    %Image2表示全色影像
    [lines2,samples2,bands2] = size(Image2);
    Image3 = zeros(lines2,samples2,bands1);
    for k = 1:bands1
        for i = 1:lines2
            for j = 1:samples2
                Image3(i,j,k) = Image2(i,j,k)*Image1(i,j,k)/sum(Image1(i,j,:));
            end
        end
    end
    figure(1)
    subplot(1,3,1);
    imshow(uint8(Image1));
    title('多光谱影像');
    subplot(1,3,2);
    imshow(uint8(Image2));
    title('全色影像');
    subplot(1,3,3);
    imshow(uint8(Image3));
    title('Brovey变换融合后的影像');
    end
    

    4.2 基于乘积变换的影像融合

    %函数名称为Image_MultiplicativeChange,输入参数Image1,Image2,输出参数Image3
    function Image3 = Image_MultiplicativeChange(Image1,Image2);
    %Image1表示多光谱图像
    [lines1,samples1,bands1] = size(Image1);
    %Image2表示全色影像
    [lines2,samples2,bands2] = size(Image2);
    Image3 = zeros(lines2,samples2,bands1);
    for k = 1:bands1
        for i = 1:lines2
            for j = 1:samples2
                Image3(i,j,k) = Image2(i,j,k)*Image1(i,j,k);
            end
        end
    end
    Image3 = round((Image3 - min(Image3))*255./(max(Image3) - min(Image3)));
    %画图
    figure(1)
    subplot(1,3,1);
    imshow(uint8(Image1));
    title('多光谱影像');
    subplot(1,3,2);
    imshow(uint8(Image2));
    title('全色影像');
    subplot(1,3,3);
    imshow(uint8(Image3));
    title('乘积变换融合后的影像');
    end
    

    4.3基于PCA的影像融合

    %函数名称为Image_PCAFusion,输入参数Image1,Image2,输出参数Image3
    function Image3 = Image_PCAFusion(Image1,Image2)
    %Image1表示多光谱图像
    [lines1,samples1,bands1] = size(Image1);
    %Image2表示全色影像
    [lines2,samples2,bands2] = size(Image2);
    Image3 = zeros(lines2,samples2,bands1);
    %PCA影像融合算法
    AY = PCA(Image1);
    %得到PCA系数
    A = cell2mat(AY(1));
    %得到第一主成分
    Y = round(cell2mat(AY(2)));
    %把高分辨率影像与第一主成分图像做直方图匹配
    YY = matching(Image2(:,:,1),reshape(Y(1,:),[lines1,samples1]));
    %将第一主成分转换成一行
    Y(1,:) = reshape(YY,[1,lines2*samples2]);
    %PCA逆变换
    X = double(uint8(inv(A)* Y));
    %将矩阵转换成三维矩阵
    for i = 1:bands1
    Image3(:,:,i) = reshape(X(i,:),[lines1,samples1]);
    end
    %画图
    figure(1);
    subplot(1,3,1);
    imshow(uint8(Image1));
    title('高光谱影像');
    subplot(1,3,2);
    imshow(uint8(Image2));
    title('全色影像');
    subplot(1,3,3);
    imshow(uint8(Image3));
    title('PCA融合后的影像');
    end
    

    4.4 基于HSI变换的影像融合

    %函数名称为Image_HSIChange,输入参数Image1,Image2,输出参数Image3
    function Image = Image_HSIChange(Image1,Image2)
    %把多光谱图像转换为HSI
    HSI = RGB2HSI(Image1);
    %提取出I向量
    HSI(:,:,3) = round(HSI(:,:,3));
    %把全色影像与I向量做直方图匹配
    I = matching(Image2(:,:,1),HSI(:,:,3));
    % I = Image2(:,:,1);
    %把I向量用全色波段替换
    HSI(:,:,3) = I;
    %将替换后的HSI转换到RGB空间
    Image3 =HSI2RGB(HSI);
    figure(1);
    subplot(1,3,1);
    imshow(uint8(Image1));
    title('高光谱影像');
    subplot(1,3,2);
    imshow(uint8(Image2));
    title('全色影像');
    subplot(1,3,3);
    imshow(uint8(Image3));
    title('HSI变换融合后的影像');
    end
    

    5 影像特征提取

    5.1 迭代阈值影像分割算法

    function G1 = Image_IterativeThresholdSegmentation(Image)
    %迭代阈值影像分割算法
    Image = Image(:,:,1);
    [lines,samples] = size(Image);
    T = median( reshape(Image,[1,lines*samples]));
    T0 = inf;
    while( abs(T0 - T) > 1e-2)
        T0 = T;
        G1 = Image>=T;
        K1 = G1.*Image;
        G2 = Image<T;
        K2 = G2.*Image;
        miu1 = sum(sum(K1))/sum(sum(G1));
        miu2 = sum(sum(K2))/sum(sum(G2));
        T = (miu1+miu2)/2;
    end
    figure(1);
    subplot(1,2,1);
    imshow(uint8(Image));
    title('原图像');
    subplot(1,2,2);
    imshow(uint8(255*G1));
    title('迭代分割后的图像');
    end
    

    5.2 区域生长影像分割算法

    function Image1 = Image_RegionGrowing(Image)
    %区域生长影像分割算法
    Image = Image(:,:,1);
    [lines,samples] = size(Image);
    figure(2);
    subplot(1,2,1);
    imshow(uint8(Image));
    title('原图像');
    Image1 = zeros(lines,samples);
    [y0,x0]=getpts;     %获得区域生长起始点
    x0 = round(x0);
    y0 = round(y0);
    % seed=I(x0,y0);
    T = 5;
    num = 1;
    index = 1;
    point = cell(1,1000);
    point{1,1}= [x0,y0];
    while(index ~= num || index ==1)
    x = point{1,index}(1);
    y = point{1,index}(2);
    for i = -1:1
        for j = -1:1
            xx = x + i;
            yy = y + j;
            if( xx>0 && xx<=lines && yy>0 && yy<=samples && abs(Image(xx,yy)-Image(x,y))<=T && Image1(xx,yy)==0)
                Image1(xx,yy) = 255;
                num = num + 1;
                point{1,num} = [xx,yy];
            end
        end
    end 
    index = index + 1;
    end
    subplot(1,2,2);
    imshow(uint8(Image1));
    title('区域生长影像分割算法处理后图像');
    end
    

    6 影像分类

    6.1 K-Means聚类分割

    function Image1 = Image_KMeans(Image)
    %k-means
    [lines,samples,bands] = size(Image);
    K = 5;
    A = reshape(Image(:,:,:),lines*samples,3);
    Center = zeros(K,3);
    center = zeros(K,3);
    %初始化聚类中心
    for k = 1:K
        Center(k,:)= round(255*k/K);
    end
    Result = zeros(lines*samples,1);
    while(Center~=center)
        center = Center;
        %按最短距离聚类
        for i = 1:lines*samples
            for k = 1:K
                Data(k) = sqrt((A(i,1)-Center(k,1))^2+(A(i,2)-Center(k,2))^2+(A(i,3)-Center(k,3))^2);
            end
            [m,index] = min(Data);
            Result(i,1) = index;
        end
        %重新计算聚类中心
        for k = 1:K
            indexx = find(Result == K);
            for j = 1:3
                Center(K,3) = mean(A(indexx,j));  
            end
        end
    end
    figure(1);
    subplot(1,2,1);
    imshow(uint8(Image));
    title('原始图像');
    Image1 = reshape(Result,lines,samples);
    subplot(1,2,2);
    imshow(label2rgb(Image1));
    title('K-means聚类分割后的影像');
    end
    

    6.2 最短距离法分类

    function Image2 = Image_MinDistance(Image)
    %最短距离分类
    [lines,samples,bands] = size(Image);
    K = 3;
    class1 = double(imread('class21.jpg'));
    class2 = double(imread('class22.jpg'));
    class3 = double(imread('class23.jpg'));
    Class1 = round([mean(mean(class1(:,:,1))),mean(mean(class1(:,:,2))),mean(mean(class1(:,:,3)))]);
    Class2 = round([mean(mean(class2(:,:,1))),mean(mean(class2(:,:,2))),mean(mean(class2(:,:,3)))]);
    Class3 = round([mean(mean(class3(:,:,1))),mean(mean(class3(:,:,2))),mean(mean(class3(:,:,3)))]);
    Class = reshape([Class1,Class2,Class3],[K,3]);
    Image= double(imread('监督分类2.jpg'));
    [lines,samples,bands] = size(Image);
    Image1 = reshape(Image,[lines*samples,3]);
    for i = 1:lines*samples
        for k = 1:K
            Data1(k) = sqrt((Image1(i,1)-Class(k,1))^2+(Image1(i,2)-Class(k,2))^2+(Image1(i,3)-Class(k,3))^2);
        end
            [m,index] = min(Data1);
            Result(i,1) = index;
    end
    figure(3);
    subplot(1,2,1);
    imshow(uint8(Image));
    title('原始图像');
    Image2 = reshape(Result,lines,samples);
    subplot(1,2,2);
    imshow(label2rgb(Image2));
    title('最短距离法聚类分割后的影像');
    end
    

    6.3 最大似然法分类

    function pattern = Image_MaxLike(x,Theta)
    %   功能:运用最大似然算法对图像进行分割
    %输入参数:
    %   x: x为n*m的特征样本矩阵,每行为一个样本,每列为样本的特征
    %   Theta:即θ,可用试探法取一固定分数,如:1/2
    %输出参数:pattern:输出聚类分析后的样本类别
    
    %clear all
    %clc
    %x=[0,0; 3,8; 2,2;1,1; 5,3; 4,8; 6,3; 5,4;  6,4;  7,5]
    %Theta=0.5;
    %[pattern,centerIndex]=MaxMinDisFun(x,0.5)%
    %参考https://blog.csdn.net/guyuealian/article/details/53708042
    maxDistance=0;
    index=1;%相当于指针指示新中心点的位置
    k=1;      %中心点计数,也即是类别
    center=zeros(size(x));    %保存中心点
    patternNum=size(x,1);  %输入的数据数(样本数)
    %distance=zeros(patternNum,3);%distance每列表示所有样本到每个聚类中心的距离
    minDistance=zeros(patternNum,1);%取较小距离
    pattern=(patternNum);%表示类别
    
    center(1,:)=x(1,:);%第一个聚类中心
    pattern(1)=1;
    
    for i=2:patternNum
        distance(i,1)=sqrt((x(i,:)-center(1,:))*(x(i,:)-center(1,:))');%欧氏距离,与第1个聚类中心的距离
        minDistance(i,1)=distance(i,1);
        pattern(i)=1;   %第一类
        if(maxDistance<distance(i,1))
            maxDistance=distance(i,1);%与第一个聚类中心的最大距离
            index=i;%与第一个聚类中心距离最大的样本
        end
    end
    
    k=k+1;
    center(k,:)=x(index,:);%把与第一个聚类中心距离最大的样本作为第二 个聚类中心
    pattern(index)=2;    %第二类
    minDistance(index,1)=0;
    
    while 1
        for i=2:patternNum 
            if(minDistance(i,1)~=0)
                distance(i,k)=sqrt((x(i,:)-center(k,:))*(x(i,:)-center(k,:))');%与第k个聚类中心的距离
               if(minDistance(i,1)>distance(i,k))
                   minDistance(i,1)=distance(i,k);
                   pattern(i)=k;
               end
            end
        end
        
        %%查找minDistance中最大值
        max=0;
        for i=2:patternNum
            if((max<minDistance(i,1))&minDistance(i,1)~=0) % (x(i,:)~=center(k,:))  
                max=minDistance(i,1);
                index=i;
            end
        end
        if(max>(maxDistance*Theta))
            k=k+1;
            center(k,:)=x(index,:);
            pattern(index)=k;
            minDistance(index,1)=0;
        else
               break;
        end
    end
    

    后续有时间再补充~

    展开全文
  • 冈萨雷斯数字图象处理Matlab版材料大集合-冈萨雷斯图像处理Matlab函数汇总.rar 冈萨雷斯数字图象处理Matlab版材料大集合
  • matlab图像处理常用函数大全

    万次阅读 多人点赞 2018-07-16 16:03:34
    显示索引图像和灰度图像&gt;&gt; [X,map]=imread('trees.tif');&gt;&gt; gmap=rgb2gray(map);&gt;&gt; figure,imshow(X,map);&gt;&gt; figure,imshow(X,gmap);利用膨胀函数平移图像...
  • 冈萨雷斯图像处理Matlab函数汇总

    千次阅读 2015-03-30 20:37:46
    图像显示 colorbar 显示彩条 getimage 由坐标轴得到图像数据 ice(DIPUM) 交互彩色编辑 image 创建和显示图像对象 imagesc 缩放数据并显示为图像 immovie 由多帧图像制作电影 imshow 显示图像 ...
  • 图像处理MATLAB编程问题汇总 在使用imhist(I)函数时,会遇到这样的问题: Error using imhist Expected input number 1, I or X, to be two-dimensional. Error in imhist&amp;amp;gt;parse_inputs (line ...
  • MATLAB(五) 图像处理--图像分割

    万次阅读 多人点赞 2018-05-11 14:00:14
    图像分割 一、基于边界的图像分割 1. 点检测 2.线检测 3.边缘检测 二、基于区域的图像分割 1.区域生长 2.区域分离和聚合 3.分水岭分割 三、阈值分割 1.使用Otsu方法进行全局阈值分割 2.使用Otsu方法进行全局...
  • matlab 二值图像处理函数汇总说明

    千次阅读 2016-01-27 18:25:29
    // strel 的说明见 日志:matlab二值图像腐蚀 2. 膨胀 imdilate( ' 目标图像 ‘ , strel () ) ; 3. 开运算 imopen( ' 目标图像 ‘ , strel () ) ; // 先腐蚀后膨胀 4. 闭运算 imclose( ' 目标图像 ‘ ,
  • matlab图像处理常用命令

    千次阅读 2017-04-18 20:26:48
    显示索引图像和灰度图像 >> [X,map]=imread('trees.tif'); >> gmap=rgb2gray(map); >> figure,imshow(X,map); >> figure,imshow(X,gmap); 利用膨胀函数平移图像 I = imread('football.jpg'); se = ...
  • matlab图像处理关于细胞计数

    万次阅读 多人点赞 2018-02-28 19:32:35
    第1章 问题重述本题共给出了如下所示的二十五张图片,每张图片都是显微镜下对运动精子静态观察的微观显示,每张图片中都含有很多条精子,随机选取一张精子的静态图片,以第十张图片为例,从图片1-2中可以看出,精子...
  • 数字图像处理MATLAB版) 作 者:(美)冈萨雷斯(Gonzalez.R.C.)等著,阮秋琦 等译 出版社:电子工业出版社 出版时间: 2005-9-1 第1章 绪言 1.1 背景知识 1.2 什么是数字图像处理 1.3 MATLAB图像处理工具箱...
  • 数字图像处理MATLAB命令汇总

    千次阅读 2014-10-31 12:52:37
    显示索引图像和灰度图像 >> [X,map]=imread('trees.tif'); >> gmap=rgb2gray(map); >> figure,imshow(X,map); >> figure,imshow(X,gmap); 利用膨胀函数平移图像 I = imread('football.jpg'); se = ...
  • 分类汇总MATLAB的所有图像处理函数及功能介绍。 如:图像显示函数、图像文件输入输出、图像分析等所有MATLAB函数。
  • 图像处理Matlab函数汇总

    千次阅读 2015-05-13 20:47:08
    图像显示 colorbar 显示彩条 getimage 由坐标轴得到图像数据 ice(DIPUM) 交互彩色编辑 image 创建和显示图像对象 imagesc 缩放数据并显示为图像 immovie 由多帧图像制作电影 imshow 显示图像...
  • 《数字图像处理MATLAB)》冈萨雷斯 未完结! 参考:数字图像处理——https://blog.csdn.net/dujing2019/article/category/8820151 ISSUE汇总: 第5章彩色图像处理 Issue1:P138例 5.4 执行p_snap = iccread...
1 2 3 4 5 ... 20
收藏数 2,880
精华内容 1,152
关键字:

图像处理matlab汇总