图像处理函数_log函数 图像处理 - CSDN
精华内容
参与话题
  • 1.1 读取和保存图像(其中I=imread(‘’)) 1.1.1 imtool() imtool(I)在图形中显示灰度图像I,I为矩阵,元素范围为0-255. imtool(I,[low,high])小于等于low的为黑色,大于等于high的为白色,中间的为灰度默认...
    1.1 读取和保存图像(其中I=imread(‘’))

    1.1.1 imtool()
    imtool(I)在图形中显示灰度图像I,I为矩阵,元素范围为0-255.
    imtool(I,[low,high])小于等于low的为黑色,大于等于high的为白色,中间的为灰度默认等级。
    imtool(X,map)X为索引图像,为一矩阵,map为颜色表,第一二三个元素分别是红绿蓝。
    imtool(RGB)显示真彩色图像,
    imtool(BW)显示二值图像。BW为一个矩阵,元素由0和1组成,0为黑色,1为白色。
    imtool close all 关闭所有图像工具

    1.1.2 subplot(m,n,p)或者subplot(m n p)
    subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果m=2就是表示2行图。p表示图所在的位置,p=1表示从左到右从上到下的第一个位置。

    1.1.3  subimage 和imshow
    subimage 显示坐标
    imshow不显示坐标


    1.1.4 图像的数据格式

    1、uint8与double
    double函数只是将读入图像的uint8数据转换为double类型,一般不使用;常用的是im2double函数,将uint8图像转为double类型,范围为0-1,如果是255的图像,那么255转为1,0还是0,中间的做相应改变。
    MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double。因I2=im2double(I1) :把图像数组I1转换成double精度类型;如果不转换,在对uint8进行加减时会产生溢出。默认情况下,matlab将图象中的数据存储为double型,即64位浮点数;matlab还支持无符号整型

    (uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。
        im2double():将图象数组转换成double精度类型
        im2uint8():将图象数组转换成unit8类型
        im2uint16():将图象数组转换成unit16类型

    2、uint8和im2uint8
      在数据类型转换时候uint8和im2uint8的区别,uint8的操作仅仅是将一个double类型的小数点后面的部分去掉;但是im2uint8是将输入中所有小于0的数设置为0,而将输入中所有大于1的数值设置为255,再将所有其他值乘以255。图像数据在计算前需要转换为double,以保证精度;很多矩阵数据也都是double的。要想显示其,必须先转换为图像的标准数据格式。如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间),那么可以直接使用im2uint8。如果转换前的数据分布不合规律,则使用uint8,将其自动切割至0~255(超过255的按255)。最好使用mat2gray,将一个矩阵转化为灰度图像的数据格式(double)    

    3、double类型图像的显示
        图像数据在进行计算前要转化为double类型的,这样可以保证图像数据运算的精度。很多矩阵的很多矩阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式。如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。具体方法有:
     imshow(I/256);    ———-将图像矩阵转化到0-1之间               
     imshow(I,[]);     ———-自动调整数据的范围以便于显示 (注意这里,必须是灰度图,否则不行)
     imshow(uint8(I));
     imshow(mat2gray(I));
     上面的mat2gray是将最终获得的矩阵转化为灰度图像。常用的为:
     A = im2uint8(mat2gray(result))
     这样就将result矩阵转化为uint8类型的图像。


    1.1.5 图像的减法运算(差分方法) 用途:

    检测图像变化及运动物体,作为许多图像处理工作的准备步骤。 函数调用格式:
    Z = imsubtract(X,Y) 和 Z = imabsdiff(X,Y) 实现:图像-图像,图像-常数
    可以看到,减法运算中有两种函数可以,imsubtract(X,Y)和 imabsdiff(X,Y),两者基本没有太大的差别,但是减法操作有时会导致某些像素值变为一个负数,对于uint8或uint16类型的数据,如果发生这种情况,那么imsubtract函数自动将这些负数截取为0,而imabsdiff计算后取了绝对值,从而使用的时候,为了避免差值产生负值,同时避免像素值运算结果之间差异过小(减去后结果为负数的不好都变成0),建议调用函数imabsdiff。


    2、图像转换:I = imread(‘1.jpg’)

     

    1)  二进制图像:在二进制图像中,每个点位两个离散值中的一个,这两个值代表开和关。二进制图像可以看做一个仅包括黑与白的特殊灰度图像,也可以看做仅有两种颜色的索引图像。

     

    2)灰度图像:它的数据矩阵中的元素值一般都在[0,1]或[0,255]之间,灰度图像根据这些数据利用线性插值来和色图中的颜色种类匹配。灰度图像是一个二维的灰度(亮度)函数f(x,y)。

     

    3)RGB图像:图像中每个象素的颜色用三个数据来存储,分别指定红、绿、蓝三原色在象素颜色中的比例关系,组成一个三维数组。彩色图像是由三个二维灰度函数f(x,y)组成。三个是RGB或者HSV。

     

    4)索引图像:它的数据信息包括一个数据矩阵和一个双精度色图矩阵,它的数据矩阵中的值直接指定该点的颜色为色图矩阵中的某一种。色图矩阵中,每一行表示一种颜色,每行有三个数据,分别表示该种颜色中红、绿、蓝的比例情况,所有元素值都在[0,1]内。

     

    5)  多帧图像: 多帧图像阵列是由多帧图像组成的,每一帧图像可以为前四种图像中的一种,但组成一个多帧图像阵列的图像必须为同一种。


    2.1 RGB图像转换成灰度图像:

    J = rgb2gray(I);

    2.2 灰度图像转换成索引图像:

    [x,map] = gray2ind(J);

    2.3RGB图像转换成索引图像:

    [x,map] = rgb2ind(I,256);

    2.4索引图像转换成灰度图像:

    J = ind2gray(x,map);

    2.5索引图像转换成RGB图像:

    K = ind2rgb(x,map);


    2.6 灰度图像转换成二值图像:

     

    1)灰度图像转换成二值图像:

    BW = im2bw(I, level)

    2)索引图像转换成二值图像:

    BW = im2bw(X, map, level)

    3)RGB图像转换成二值图像:

    BW = im2bw(RGB, level)

         其中level就是设置阈值的。level取值范围[0, 1]。



    3、图像变换:

     

    3.1傅里叶变换:






    转载来源于 https://blog.csdn.net/strive_0902/article/details/78193884
    版权归作者所有
    展开全文
  • matlab图像处理常用函数大全

    万次阅读 多人点赞 2018-07-16 16:03:34
    显示索引图像和灰度图像>> [X,map]=imread('trees.tif');>> gmap=rgb2gray(map);&...利用膨胀函数平移图像I = imread('football.jpg');se = translate(strel(1), [...
    显示索引图像和灰度图像
    >> [X,map]=imread('trees.tif');
    >> gmap=rgb2gray(map);
    >> figure,imshow(X,map);
    >> figure,imshow(X,gmap);


    利用膨胀函数平移图像
    I = imread('football.jpg');
    se = translate(strel(1), [30 30]);%将一个平面结构化元素分别向下和向右移动30个位置
    J = imdilate(I,se);%利用膨胀函数平移图像
    subplot(121);imshow(I), title('原图')
    subplot(122), imshow(J), title('移动后的图像');


    水平翻转和上下翻转
    I = imread('cameraman.tif');
    Flip1=fliplr(I);               %  对矩阵I左右反转
    subplot(131);imshow(I);title('原图');
    subplot(132);imshow(Flip1);title('水平镜像');
    Flip2=flipud(I);               %  对矩阵I垂直反转
    subplot(133);imshow(Flip2);title('竖直镜像');


    图像旋转
    I=imread('cameraman.tif');
    B=imrotate(I,60,'bilinear','crop');
    %双线性插值法旋转图像,并裁剪图像,使其和原图像大小一致
    subplot(121),imshow(I),title('原图');
    subplot(122),imshow(B),title('旋转图像60^{o},并剪切图像');


    截取图像
    I = imread('circuit.tif');
    I2 = imcrop(I,[75 68 130 112]);
    imshow(I), figure, imshow(I2)


    画轮廓
    >> I=imread('circuit.tif');
    >> imshow(I)
    >> figure
    >> imcontour(I,3)


    噪声和滤波
    I=imread('cameraman.tif');
    J=imnoise(I,'salt & pepper',0.02);%添加椒盐噪声
    subplot(121),imshow(J);title('噪声图像')
    K=medfilt2(J);%使用3*3的邻域窗的中值滤波
    subplot(122),imshow(K);title('中值滤波后图像')




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


    imshow(J)
    ③对比度调整: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;01 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);


     


     


    数字数字图像增强
    1. 直方图均衡化的 Matlab 实现
    1.1 imhist 函数
    功能:计算和显示数字数字图像的色彩直方图
    格式:imhist(I,n)
            imhist(X,map)
    说明:imhist(I,n) 其中,n 为指定的灰度级数目,缺省值为256;imhist(X,map) 就算和显示索引色数字数字图像 X 的直方图,map为调色板。用stem(x,counts) 同样可以显示直方图。


    1.2 imcontour 函数
    功能:显示数字数字图像的等灰度值图
    格式:imcontour(I,n),imcontour(I,v)
    说明:n 为灰度级的个数,v 是有用户指定所选的等灰度级向量。


    1.3 imadjust 函数
    功能:通过直方图变换调整对比度
    格式:J=imadjust(I,[low high],[bottomtop],gamma)
            newmap=imadjust(map,[low high],[bottomtop],gamma)
    说明:J=imadjust(I,[low high],[bottomtop],gamma) 其中,gamma 为校正量r,[lowhigh] 为原数字数字图像中要变换的灰度范围,[bottom top]
    指定了变换后的灰度范围;newmap=imadjust(map,[lowhigh],[bottom top],gamma) 调整索引色数字数字图像的调色板 map 。此时若 [low high] 和
    [bottom top] 都为2×3的矩阵,则分别调整 R、G、B 3个分量。


    1.4 histeq 函数
    功能:直方图均衡化
    格式:J=histeq(I,hgram)
            J=histeq(I,n)
            [J,T]=histeq(I,...)
            newmap=histeq(X,map,hgram)
            newmap=histeq(X,map)
            [new,T]=histeq(X,...)
    说明:J=histeq(I,hgram) 实现了所谓“直方图规定化”,即将原是图象 I 的直方图变换成用户指定的向量 hgram 。hgram 中的每一个元素
    都在 [0,1] 中;J=histeq(I,n) 指定均衡化后的灰度级数 n ,缺省值为 64;[J,T]=histeq(I,...)返回从能将数字数字图像 I 的灰度直方图变换成
    数字数字图像 J 的直方图的变换 T ;newmap=histeq(X,map) 和 [new,T]=histeq(X,...) 是针对索引色数字数字图像调色板的直方图均衡。


    2. 噪声及其噪声的 Matlab 实现
            imnoise 函数
    格式:J=imnoise(I,type)
            J=imnoise(I,type,parameter)
    说明:J=imnoise(I,type) 返回对数字数字图像 I 添加典型噪声后的有噪数字数字图像 J ,参数type 和 parameter 用于确定噪声的类型和相应的参数。




    3. 数字数字图像滤波的 Matlab 实现


    3.1 conv2 函数
    功能:计算二维卷积
    格式:C=conv2(A,B)
            C=conv2(Hcol,Hrow,A)
            C=conv2(...,'shape')
    说明:对于 C=conv2(A,B) ,conv2 的算矩阵A 和 B 的卷积,若[Ma,Na]=size(A), [Mb,Nb]=size(B), 则 size(C)=[Ma+Mb-1,Na+Nb-1];
    C=conv2(Hcol,Hrow,A) 中,矩阵 A 分别与Hcol 向量在列方向和 Hrow 向量在行方向上进行卷积;C=conv2(...,'shape') 用来指定 conv2
    返回二维卷积结果部分,参数 shape 可取值如下:
            》full为缺省值,返回二维卷积的全部结果;
            》same返回二维卷积结果中与 A 大小相同的中间部分;
            valid 返回在卷积过程中,未使用边缘补 0 部分进行计算的卷积结果部分,当 size(A)>size(B) 时,size(C)=[Ma-Mb+1,Na-Nb+1]。


    3.2 conv 函数
    功能:计算多维卷积
    格式:与 conv2 函数相同


    3.3 filter2函数
    功能:计算二维线型数字滤波,它与函数 fspecial 连用
    格式:Y=filter2(B,X)
            Y=filter2(B,X,'shape')
    说明:对于 Y=filter2(B,X) ,filter2 使用矩阵B 中的二维 FIR 滤波器对数据 X 进行滤波,结果 Y 是通过二维互相关计算出来的,其大
    小与 X 一样;对于Y=filter2(B,X,'shape') ,filter2返回的 Y 是通过二维互相关计算出来的,其大小由参数 shape 确定,其取值如下

            》full返回二维相关的全部结果,size(Y)>size(X);
            》same返回二维互相关结果的中间部分,Y 与X 大小相同;
            》valid返回在二维互相关过程中,未使用边缘补 0 部分进行计算的结果部分,有 size(Y)<size(X) 。


    3.4 fspecial 函数
    功能:产生预定义滤波器
    格式:H=fspecial(type)
            H=fspecial('gaussian',n,sigma)        高斯低通滤波器
            H=fspecial('sobel')                        Sobel 水平边缘增强滤波器
            H=fspecial('prewitt')                     Prewitt 水平边缘增强滤波器
            H=fspecial('laplacian',alpha)            近似二维拉普拉斯运算滤波器
            H=fspecial('log',n,sigma)                高斯拉普拉斯(LoG)运算滤波器
            H=fspecial('average',n)                  均值滤波器
            H=fspecial('unsharp',alpha)            模糊对比增强滤波器
    说明:对于形式 H=fspecial(type) ,fspecial 函数产生一个由 type 指定的二维滤波器 H ,返回的H 常与其它滤波器搭配使用。




    4. 彩色增强的 Matlab 实现
    4.1 imfilter函数
    功能:真彩色增强
    格式:B=imfilter(A,h)
    说明:将原始数字数字图像 A 按指定的滤波器 h 进行滤波增强处理,增强后的数字数字图像 B 与A 的尺寸和类型相同


     


    数字数字图像的变换


    1. 离散傅立叶变换的Matlab 实现
          Matlab 函数 fft、fft2 和 fftn 分别可以实现一维、二维和 N 维 DFT 算法;而函数 ifft、ifft2 和 ifftn 则用来计算反 DFT 。
    这些函数的调用格式如下:
             A=fft(X,N,DIM)
          其中,X 表示输入数字数字图像;N 表示采样间隔点,如果 X 小于该数值,那么 Matlab 将会对 X 进行零填充,否则将进行截取,使之长度为
    N ;DIM 表示要进行离散傅立叶变换。
            A=fft2(X,MROWS,NCOLS) 
    其中,MROWS 和 NCOLS 指定对 X 进行零填充后的 X 大小。
            A=fftn(X,SIZE)
    其中,SIZE 是一个向量,它们每一个元素都将指定 X 相应维进行零填充后的长度。
          函数 ifft、ifft2 和 ifftn的调用格式于对应的离散傅立叶变换函数一致。
    例子:数字数字图像的二维傅立叶频谱
    % 读入原始数字数字图像
    I=imread('lena.bmp');
    imshow(I)
    % 求离散傅立叶频谱
    J=fftshift(fft2(I));
    figure;
    imshow(log(abs(J)),[8,10])


    2. 离散余弦变换的 Matlab实现
    2.1. dCT2 函数
    功能:二维 DCT 变换
    格式:B=dct2(A) 
            B=dct2(A,m,n) 
            B=dct2(A,[m,n]) 
    说明:B=dct2(A) 计算 A 的 DCT 变换 B ,A 与 B 的大小相同;B=dct2(A,m,n) 和 B=dct2(A,[m,n]) 通过对 A 补 0 或剪裁,使 B 的大小为 m×n。


    2.2. dict2 函数
    功能:DCT 反变换
    格式:B=idct2(A) 
            B=idct2(A,m,n) 
            B=idct2(A,[m,n]) 
    说明:B=idct2(A) 计算 A 的 DCT 反变换 B ,A 与 B 的大小相同;B=idct2(A,m,n) 和 B=idct2(A,[m,n]) 通过对 A 补 0 或剪裁,使 B的大小为 m×n。


    2.3. dctmtx函数
    功能:计算 DCT 变换矩阵
    格式:D=dctmtx(n)
    说明:D=dctmtx(n) 返回一个 n×n 的 DCT 变换矩阵,输出矩阵 D 为 double 类型。


    3. 数字数字图像小波变换的Matlab 实现
    3.1 一维小波变换的 Matlab实现
    (1) dwt 函数
    功能:一维离散小波变换
    格式:[cA,cD]=dwt(X,'wname')
            [cA,cD]=dwt(X,Lo_D,Hi_D)
    说明:[cA,cD]=dwt(X,'wname')使用指定的小波基函数'wname' 对信号 X 进行分解,cA、cD分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。


    (2) idwt 函数
    功能:一维离散小波反变换
    格式:X=idwt(cA,cD,'wname')
            X=idwt(cA,cD,Lo_R,Hi_R)
            X=idwt(cA,cD,'wname',L)
            X=idwt(cA,cD,Lo_R,Hi_R,L)
    说明:X=idwt(cA,cD,'wname')由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
            'wname' 为所选的小波函数
            X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 。
            X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。


    3.2 二维小波变换的 Matlab实现
              二维小波变换的函数
    -------------------------------------------------
         函数名                函数功能
    ---------------------------------------------------
         dwt2           二维离散小波变换
       wavedec2       二维信号的多层小波分解
         idwt2          二维离散小波反变换
       waverec2        二维信号的多层小波重构
       wrcoef2          由多层小波分解重构某一层的分解信号
       upcoef2          由多层小波分解重构近似分量或细节分量
       detcoef2         提取二维信号小波分解的细节分量
       appcoef2        提取二维信号小波分解的近似分量
       upwlev2         二维小波分解的单层重构
       dwtpet2         二维周期小波变换
       idwtper2        二维周期小波反变换
    -------------------------------------------------------------
    (1) wcodemat 函数
    功能:对数据矩阵进行伪彩色编码
    格式:Y=wcodemat(X,NB,OPT,ABSOL)
            Y=wcodemat(X,NB,OPT)
            Y=wcodemat(X,NB)
            Y=wcodemat(X)
    说明:Y=wcodemat(X,NB,OPT,ABSOL)返回数据矩阵 X 的编码矩阵 Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;
           OPT 指定了编码的方式(缺省值为 'mat'),即:
                    OPT='row' ,按行编码
                    OPT='col' ,按列编码
                    OPT='mat' ,按整个矩阵编码
           ABSOL 是函数的控制参数(缺省值为 '1'),即:
                    ABSOL=0 时,返回编码矩阵
                    ABSOL=1 时,返回数据矩阵的绝对值ABS(X)


    (2) dwt2 函数
    功能:二维离散小波变换
    格式:[cA,cH,cV,cD]=dwt2(X,'wname')
            [cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)
    说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数 'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分
    量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分
    解信号 X 。


    (3) wavedec2 函数
    功能:二维信号的多层小波分解
    格式:[C,S]=wavedec2(X,N,'wname')
            [C,S]=wavedec2(X,N,Lo_D,Hi_D)
    说明:[C,S]=wavedec2(X,N,'wname')使用小波基函数'wname' 对二维信号 X 进行 N 层分解;[C,S]=wavedec2(X,N,Lo_D,Hi_D) 使用指定
    的分解低通和高通滤波器Lo_D 和 Hi_D 分解信号 X 。


    (4) idwt2 函数
    功能:二维离散小波反变换
    格式:X=idwt2(cA,cH,cV,cD,'wname')
            X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)
            X=idwt2(cA,cH,cV,cD,'wname',S)
            X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)
    说明:X=idwt2(cA,cH,cV,cD,'wname')由信号小波分解的近似信号cA 和细节信号 cH、cH、cV、cD 经小波反变换重构原信号 X
    ;X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)使用指定的重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号 X ;X=idwt2(cA,cH,cV,cD,'wname',S)
    和X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S) 返回中心附近的 S 个数据点。


    (5) waverec2 函数
    说明:二维信号的多层小波重构
    格式:X=waverec2(C,S,'wname')
            X=waverec2(C,S,Lo_R,Hi_R)
    说明:X=waverec2(C,S,'wname')由多层二维小波分解的结果 C、S 重构原始信号 X ,'wname'为使用的小波基函数;X=waverec2(C,S,Lo_R,Hi_R) 使用重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号。


     


     


    数字数字图像处理工具箱
    1. 数字数字图像和数字数字图像数据
       缺省情况下,MATLAB将数字数字图像中的数据存储为双精度类型(double),64位浮点
    数,所需存储量很大;MATLAB还支持另一种类型无符号整型(uint8),即数字数字图像矩
    阵中每个数据占用1个字节。
       在使用MATLAB工具箱时,一定要注意函数所要求的参数类型。另外,uint8
    与double两种类型数据的值域不同,编程需注意值域转换。
              从uint8到double的转换
       ---------------------------------------------
           数字数字图像类型        MATLAB语句
       ---------------------------------------------
         索引色             B=double(A)+1
         索引色或真彩色 B=double(A)/255
         二值数字数字图像          B=double(A)
       ---------------------------------------------
             从double到uint8的转换
       ---------------------------------------------
           数字数字图像类型        MATLAB语句
       ---------------------------------------------
        索引色              B=uint8(round(A-1))
        索引色或真彩色   B=uint8(round(A*255))
        二值数字数字图像           B=logical(uint8(round(A)))
       ---------------------------------------------


    2. 数字数字图像处理工具箱所支持的数字数字图像类型
    2.1 真彩色数字数字图像
        R、G、B三个分量表示一个像素的颜色。如果要读取数字数字图像中(100,50)处的像素值,
    可查看三元数据(100,50,1:3)。
        真彩色数字数字图像可用双精度存储,亮度值范围是[0,1];比较符合习惯的存储方法是用无
    符号整型存储,亮度值范围[0,255]
       
    2.2 索引色数字数字图像
       包含两个结构,一个是调色板,另一个是数字数字图像数据矩阵。调色板是一个有3列和若干行
    的色彩映象矩阵,矩阵每行代表一种颜色,3列分别代表红、绿、蓝色强度的双精度数。
       
       注意:MATLAB中调色板色彩强度[0,1],0代表最暗,1代表最亮。
              常用颜色的RGB值
       --------------------------------------------
        颜色   R   G   B      颜色    R  G   B 
       --------------------------------------------
         黑     0   0   1     洋红    1   0   1
         白     1   1   1     青蓝    0   1   1
         红     1   0   0     天蓝 0.67 0   1
         绿     0   1   0     橘黄    1 0.5 0
         蓝     0   0   1     深红   0.5 0   0
         黄     1   1   0      灰    0.5 0.5 0.5       
       --------------------------------------------
             产生标准调色板的函数
       -------------------------------------------------
        函数名      调色板
       -------------------------------------------------
         Hsv       色彩饱和度,以红色开始,并以红色结束
         Hot       黑色-红色-黄色-白色
         Cool      青蓝和洋红的色度
         Pink      粉红的色度
         Gray      线型灰度
         Bone      带蓝色的灰度
         Jet        Hsv的一种变形,以蓝色开始,以蓝色结束
         Copper    线型铜色度
         Prim       三棱镜,交替为红、橘黄、黄、绿和天蓝
         Flag       交替为红、白、蓝和黑
    --------------------------------------------------
       缺省情况下,调用上述函数灰产生一个64×3的调色板,用户也可指定调色板大小。
       
       索引色数字数字图像数据也有double和uint8两种类型。
       当数字数字图像数据为double类型时,值1代表调色板中的第1行,值2代表第2行……
       如果数字数字图像数据为uint8类型,0代表调色板的第一行,,值1代表第2行……


    2.3 灰度数字数字图像
       存储灰度数字数字图像只需要一个数据矩阵。
       数据类型可以是double,[0,1];也可以是uint8,[0,255]


    2.4 二值数字数字图像
       二值数字数字图像只需一个数据矩阵,每个像素只有两个灰度值,可以采用uint8或double类型存储。
       MATLAB工具箱中以二值数字数字图像作为返回结果的函数都使用uint8类型。


    2.5 数字数字图像序列
       MATLAB工具箱支持将多帧数字数字图像连接成数字数字图像序列。
       数字数字图像序列是一个4维数组,数字数字图像帧的序号在数字数字图像的长、宽、颜色深度之后构成第4维。
       分散的数字数字图像也可以合并成数字数字图像序列,前提是各数字数字图像尺寸必须相同,若是索引色数字数字图像,
    调色板也必须相同。
       可参考cat()函数    A=cat(4,A1,A2,A3,A4,A5)


    3. MATLAB数字数字图像类型转换
             数字数字图像类型转换函数
      ---------------------------------------------------------------------------
         函数名                     函数功能
      ---------------------------------------------------------------------------
         dither       数字数字图像抖动,将灰度图变成二值图,或将真彩色数字数字图像抖动成索引色数字数字图像
        gray2ind    将灰度数字数字图像转换成索引数字数字图像
        grayslice    通过设定阈值将灰度数字数字图像转换成索引色数字数字图像
         im2bw      通过设定亮度阈值将真彩色、索引色、灰度图转换成二值图
        ind2gray    将索引色数字数字图像转换成灰度数字数字图像
        ind2rgb      将索引色数字数字图像转换成真彩色数字数字图像
        mat2gray   将一个数据矩阵转换成一副灰度图
        rgb2gray    将一副真彩色数字数字图像转换成灰度数字数字图像
        rgb2ind      将真彩色数字数字图像转换成索引色数字数字图像
       ------------------------------------------------------------------------


    4. 数字数字图像文件的读写和查询
    4.1 图形数字数字图像文件的读取
       利用函数imread()可完成图形数字数字图像文件的读取,语法:
         A=imread(filename,fmt)
         [X,map]=imread(filename,fmt)
         [...]=imread(filename)
         [...]=imread(filename,idx) (只对TIF格式的文件)
         [...]=imread(filename,ref) (只对HDF格式的文件)
       通常,读取的大多数数字图像均为8bit,当这些数字图像加载到内存中时,Matlab就将其存放
    在类uint8中。此为Matlab还支持16bit的PNG和TIF数字图像,当读取这类文件时,Matlab就将
    其存贮在uint16中。
       注意:对于索引数字图像,即使数字图像阵列的本身为类uint8或类uint16,imread函数仍将
    颜色映象表读取并存贮到一个双精度的浮点类型的阵列中。


    4.2 图形数字图像文件的写入
       使用imwrite函数,语法如下:
       imwrite(A,filename,fmt)
       imwrite(X,map,filename,fmt)
       imwrite(...,filename)
       imwrite(...,parameter,value)
       当利用imwrite函数保存数字图像时,Matlab缺省的方式是将其简化道uint8的数据格式。


    4.3 图形数字图像文件信息的查询  imfinfo()函数




    5. 数字图像文件的显示
    5.1 索引数字图像及其显示
       方法一:
              image(X)
              colormap(map)
       方法二: 
              imshow(X,map)


    5.2 灰度数字图像及其显示
       Matlab 7.0 中,要显示一副灰度数字图像,可以调用函数 imshow 或 imagesc (即 
    imagescale,数字图像缩放函数)
       (1) imshow 函数显示灰度数字图像
        使用imshow(I)    或 使用明确指定的灰度级书目:imshow(I,32)
        
        由于Matlab自动对灰度数字图像进行标度以适合调色板的范围,因而可以使用自定义
    大小的调色板。其调用格式如下:
               imshow(I,[low,high])
        其中,low 和 high 分别为数据数组的最小值和最大值。
       (2) imagesc 函数显示灰度数字图像
       下面的代码是具有两个输入参数的 imagesc 函数显示一副灰度数字图像
           imagesc(1,[0,1]);
           colormap(gray);
        imagesc 函数中的第二个参数确定灰度范围。灰度范围中的第一个值(通常是0),
    对应于颜色映象表中的第一个值(颜色),第二个值(通常是1)则对应与颜色映象表
    中的最后一个值(颜色)。灰度范围中间的值则线型对应与颜色映象表中剩余的值(颜色)。
        在调用 imagesc 函数时,若只使用一个参数,可以用任意灰度范围显示数字图像。在该
    调用方式下,数据矩阵中的最小值对应于颜色映象表中的第一个颜色值,数据矩阵中的最大
    值对应于颜色映象表中的最后一个颜色值。


    5.3 RGB 数字图像及其显示
       (1) image(RGB) 
       不管RGB数字图像的类型是double浮点型,还是 uint8 或 uint16 无符号整数型,Matlab都
    能通过 image 函数将其正确显示出来。
       RGB8 = uint8(round(RGB64×255)); %将 double 浮点型转换为 uint8 无符号整型
       RGB64 = double(RGB8)/255;           % 将 uint8 无符号整型转换为 double 浮点型
       RGB16 = uint16(round(RGB64×65535)); %将 double 浮点型转换为 uint16 无符号整型 
       RGB64 = double(RGB16)/65535;      % 将 uint16 无符号整型转换为 double 浮点型
       (2) imshow(RGB) 参数是一个 m×n×3 的数组


    5.4 二进制数字图像及其显示
       (1) imshow(BW)
       在 Matlab 7.0 中,二进制数字图像是一个逻辑类,仅包括 0 和 1 两个数值。像素 0 显示
    为黑色,像素 1 显示为白色。
       显示时,也可通过NOT(~)命令,对二进制图象进行取反,使数值 0 显示为白色;1 显示
    为黑色。 
       例如:imshow(~BW)
       (2) 此外,还可以使用一个调色板显示一副二进制数字图像。如果图形是 uint8 数据类型,
    则数值 0 显示为调色板的第一个颜色,数值 1 显示为第二个颜色。
       例如:imshow(BW,[1 0 0;0 0 1])  


    5.5 直接从磁盘显示数字图像
       可使用一下命令直接进行数字图像文件的显示: 
            imshow filename
       其中,filename 为要显示的数字图像文件的文件名。
       如果数字图像是多帧的,那么imshow 将仅显示第一帧。但需注意,在使用这种方式时,数字图像
    数据没有保存在Matlab7.0 工作平台。如果希望将数字图像装入工作台中,需使用 getimage 函数,从当前的句柄图形数字图像对象中获取数字图像数据,
       命令形式为: rgb = getimage;


    bwlabel 
    功能: 
    标注二进制数字图像中已连接的部分。 
    L = bwlabel(BW,n) 
    [L,num] = bwlabel(BW,n)
    isbw 
    功能: 
    判断是否为二进制数字图像。 
    语法: 
    flag = isbw(A) 
    相关命令: 
    isind, isgray, isrgb 
    74.isgray 
    功能: 
    判断是否为灰度数字图像。 
    语法: 
    flag = isgray(A) 
    相关命令: 
    isbw, isind, isrgb
    11.bwselect 
    功能: 
    在二进制数字图像中选择对象。
    语法: 
    BW2 = bwselect(BW1,c,r,n) 
    BW2 = bwselect(BW1,n) 
    [BW2,idx] = bwselect(...) 
    举例 
    BW1 = imread('text.tif'); 
    c = [16 90 144]; 
    r = [85 197 247]; 
    BW2 = bwselect(BW1,c,r,4); 
    imshow(BW1) 
    figure, imshow(BW2)
    47.im2bw 
    功能: 
    转换数字图像为二进制数字图像。 
    语法: 
    BW = im2bw(I,level) 
    BW = im2bw(X,map,level) 
    BW = im2bw(RGB,level) 
    举例 
    load trees 
    BW = im2bw(X,map,0.4); 
    imshow(X,map)
    展开全文
  • 几种常用的图像处理函数库   OpenCV OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且...

    几种常用的图像处理函数库

     

    OpenCV

    OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

    OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。

    所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。

     

    点评:

    功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法;然后将图像格式和矩阵运算,然后将各个算法的实现函数。该库显示图像极其方便,但该库似乎不大稳定,对32F和16S、8U的图像数据支持上bug重重。好处是该库是开放的,所以自己可以修改;而且支持CVS。另外该库用的是IPL矩阵库,速度很快。

     

    CxImage

     

    CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等。

     

    点评:

    该开发包完全开放源代码,图像封装为一个类,功能极为强大,与Windows、MFC支持极好,支持图像的多种操作(线性滤波、中值滤波、直方图操作、旋转缩放、区域选取、阈值处理、膨胀腐蚀、alpha混合等等),支持从文件、内存或者win32api定义的位图图像格式中读取图像,支持将图像显示在任意窗口,功能可谓很强大了,而且对像素的操作很方便,另外还有一个界面很强的demo,可以直接在上面进行二次开发,推荐使用!

    缺点:里面的子库很多,用起来可能较麻烦;而且感觉速度稍慢,不如后面提到的freeimage,但功能真的十分强大啊!

    CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。

     

    CImg

    CImg 库是一个免费、开源的图像处理C++库,名称原意是 Cool Image,正如其名,CImg是一个非常优秀、功能强大、代码简洁、使用方便的C++ 图像处理库。它不仅非常适合科学家、研究生做科研时使用,也适合在工业应用工程开发中使用,更适合的是,对于有志于开发简洁、高效、功能强大的图像处理库的人而言,CImg的源码是不可多得的学习和参考资料。

     

    点评:

    就一个.h文件所以用起来很简明,但感觉功能上不如CxImage。可以与CxImage配合使用,因为CImg提供了基于lapack的矩阵运算函数和完善的线性滤波卷积函数,同时CImg做像素运算还是很方便的。另外,独有Display类可以方便的实现各种显示,包括显示图像、打字、画线等等。还有,该库有个基于光流的多尺度图像配准例子,很好。

     

    FreeImage

     

    FreeImage [1] 是一款免费的、开源的、跨平台(Windows 、Linux 和Mac OS X )的,支持20 多种图像类型的(如BMP 、JPEG 、GIF 、PNG 、TIFF 等)图像处理库。其最大优点就是采用插件驱动型架构,具有快速、灵活、简单易用的特点,得到了广泛使用。

    FreeImage 的主要功能有多格式位图的读写;方便的位图信息获取;位深度转换;位图页面访问;基本的几何变换和点处理;通道合并与混合等。FreeImage 暂时不支持矢量图形和高级图像处理,位图绘制需要由用户来完成。

    FreeImage 中的所有函数都以FreeImage_ 开头,如图像文件的读写函数分别为FreeImage_Load 和FreeImage_Save 。FIBITMAP 数据结构保存着位图信息和像素数据,是FreeImage 的核心。

     

    点评:

    C语言的体系,大量使用指针运算速度可以保证,内含先进的多种插值算法。另外独有的支持meta exif信息的读取。该库最大的特点就是比较简练,只把重点放在对各种格式图像的读取写入支持上,没有显示部分,实际编程的时候还是需要调用API函数进行显示。

    展开全文
  • 图像处理算法其实都很简单

    万次阅读 多人点赞 2018-05-03 16:07:12
     线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像...
    要学习高斯模糊我们首先要知道一些基本概念:
    

    线性滤波与卷积的基本概念

          线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。

          对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置,这个操作就叫卷积或者协相关。卷积和协相关的差别是,卷积需要先对滤波矩阵进行180的翻转,但如果矩阵是对称的,那么两者就没有什么差别了。

          Correlation 和 Convolution可以说是图像处理最基本的操作,但却非常有用。这两个操作有两个非常关键的特点:它们是线性的,而且具有平移不变性shift-invariant。平移不变性指我们在图像的每个位置都执行相同的操作。线性指这个操作是线性的,也就是我们用每个像素的邻域的线性组合来代替这个像素。这两个属性使得这个操作非常简单,因为线性操作是最简单的,然后在所有地方都做同样的操作就更简单了。

          实际上,在信号处理领域,卷积有广泛的意义,而且有其严格的数学定义,但在这里不关注这个。

          2D卷积需要4个嵌套循环4-double loop,所以它并不快,除非我们使用很小的卷积核。这里一般使用3x3或者5x5。而且,对于滤波器,也有一定的规则要求:

          1)滤波器的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。

          2)滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。

          3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。

          4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。

    神奇的卷积核

          上面说到,对图像的滤波处理就是对图像应用一个小小的卷积核,那这个小小的卷积核到底有哪些魔法。下面我们一起来领略下一些简单但不简单的卷积核的魔法。

     

    1、啥也不做

     

          哈哈,大家可以看到啥了吗?这个滤波器啥也没有做,得到的图像和原图是一样的。因为只有中心点的值是1。邻域点的权值都是0,对滤波后的取值没有任何影响。

     

     

          下面我们动点真格的。

     

    2、图像锐化滤波器Sharpness Filter

     

          图像的锐化和边缘检测很像,首先找到边缘,然后把边缘加到原来的图像上面,这样就强化了图像的边缘,使图像看起来更加锐利了。这两者操作统一起来就是锐化滤波器了,也就是在边缘检测滤波器的基础上,再在中心的位置加1,这样滤波后的图像就会和原始的图像具有同样的亮度了,但是会更加锐利。

     

     

          我们把核加大,就可以得到更加精细的锐化效果

     

     

          另外,下面的滤波器会更强调边缘:

     

     

          主要是强调图像的细节。最简单的3x3的锐化滤波器如下:

     

                                          

     

          大家应该也看出来了,锐化滤波器实际上就是计算当前点和周围点的差别,然后将这个差别加到原来的位置上。

     

    3、边缘检测Edge Detection

     

          我们要找水平的边缘:需要注意的是,这里矩阵的元素和是0,所以滤波后的图像会很暗,只有边缘的地方是有亮度的。

     

     

          为什么这个滤波器可以寻找到水平边缘呢?因为用这个滤波器卷积相当于求导的离散版本:你将当前的像素值减去前一个像素值,这样你就可以得到这个函数在这两个位置的差别或者斜率。下面的滤波器可以找到垂直方向的边缘,这里像素上和下的像素值都使用:

     

     

          再下面这个滤波器可以找到45度的边缘:取-2不为了什么,只是为了让矩阵的元素和为0而已。

     

     

          那下面这个滤波器就可以检测所有方向的边缘:

     

                                          

     

          为了检测边缘,我们需要在图像对应的方向计算梯度。用下面的卷积核来卷积图像,就可以了。但在实际中,这种简单的方法会把噪声也放大了。另外,需要注意的是,矩阵所有的值加起来要是0.

     

                                           

     

    4、浮雕Embossing Filter

     

          浮雕滤波器可以给图像一种3D阴影的效果。只要将中心一边的像素减去另一边的像素就可以了。这时候,像素值有可能是负数,我们将负数当成阴影,将正数当成光,然后我们对结果图像加上128的偏移。这时候,图像大部分就变成灰色了。

     

          下面是45度的浮雕滤波器

     

     

          我们只要加大滤波器,就可以得到更加夸张的效果了

     

     

          这种效果非常的漂亮,就像是将一副图像雕刻在一块石头上面一样,然后从一个方向照亮它。它和前面的滤波器不同,它是非对称的。另外,它会产生负数值,所以我们需要将结果偏移,以得到图像灰度的范围。

     

     

     

                                                          A:原图像。B:锐化。C:边缘检测。D:浮雕

     

    5、运动模糊Motion Blur

          运动模糊可以通过只在一个方向模糊达到,例如下面9x9的运动模糊滤波器。注意,求和结果要除以9。

     

          这个效果就好像,摄像机是从左上角移动的右下角。

     

      看了一些好玩的滤波器后我们可以进入主题了,首先来看均值模糊:

    均值模糊Box Filter (Averaging)

     

          我们可以将当前像素和它的四邻域的像素一起取平均,然后再除以5,或者直接在滤波器的5个地方取0.2的值即可,如下图:

     

     

          可以看到,这个模糊还是比较温柔的,我们可以把滤波器变大,这样就会变得粗暴了:注意要将和再除以13.

     

     

          所以,如果你想要更模糊的效果,加大滤波器的大小即可。或者对图像应用多次模糊也可以。

     

     

     

     

     

     

     

    高斯模糊

          其实模糊滤波器就是对周围像素进行加权平均处理,均值模糊很简单,周围像素的权值都相同,所以不是很平滑。高斯模糊就有这个优点,所以被广泛用在图像降噪上。特别是在边缘检测之前,都会用来移除细节。那么下面我们就看看高斯模糊的权值是如何分配的。

     

    正态分布的权重
      正态分布显然是一种可取的权重分配模式。在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。
    高斯函数
      上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布
    正态分布的密度函数叫做"高斯函数"(Gaussian function)。它的一维形式是:
    一维形式
      其中,μ是x的均值,σ是x的标准差。因为计算平均值的时候,中心点就是原点,所以μ等于0。即:
    进一步推导
      根据一维高斯函数,可以推导得到二维高斯函数:
    二维高斯函数
      有了这个函数 ,就可以计算每个点的权重了。
      假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:
    权重矩阵
      更远的点以此类推。下面就是5*5的高斯滤波器和平滑效果:

     

    展开全文
  • matlab里的图像处理函数

    万次阅读 多人点赞 2019-02-19 15:56:54
    一、imfinfo函数——查看图像文件信息,注意参数是文件路径和文件名,不是图像对应的矩阵。 &gt;&gt; imfinfo('C:\Users\zhulf\Desktop\1.jpg') ans =   Filename: 'C:\Users\zhulf\Desktop\1.jpg'  ...
  • 效果 今天在写超像素代码模块的时候偶然发现利用超像素竟然...处理效果: 实现步骤 很简单两步就行了: 第一步:超像素分割区域 第二步:分割区域材质取样替代原像素 下面是原创代码: from skimage.segmentati...
  • MATLAB图像处理工具箱

    万次阅读 2012-02-25 12:01:34
    下列表格中除了个别函数外,其余函数都是图像处理工具箱提供的关于图像处理函数,现摘录到此以备查找。 表1 图像显示 函数名 功能说明 函数名 功能说明 colorbar 颜色条显示 ...
  • matlab实现直方图均衡化

    万次阅读 多人点赞 2018-04-16 15:34:34
    直方图均衡化是一种利用灰度变换自动调节图像对比度质量的方法,基本思想是通过灰度级的概率密度函数求出灰度变换函数,它是一种以累计分布函数变换法为基础的直方图修正法。直方图均衡化处理的步骤如下:1. 求出...
  • 图像处理之—振铃现象

    万次阅读 2016-12-20 22:16:47
    图像处理中,对一幅图像进行滤波处理,如果选用的频域滤波器具有陡峭的变化,则会使滤波图像产生“振铃现象”。如下图: 振铃现象产生的本质原因是: 对于辛格函数sinc而言,经过傅里叶变换之后的函数形式为窗...
  • matlab中 rgb2gray() 函数 具体实现

    万次阅读 2018-06-03 20:13:46
    简介 rgb2gray是matlab内部一种处理图像函数,通过消除图像色调和饱和度信息同时保留亮度实现将将RGB图像或彩色图转换为灰度图像,即灰度化处理的功能,调用这个功能的格式是I = rgb2gray(RGB),意思是将真彩色...
  • 读入图片peppers.bmp 保存在变量A中,将A展示在figure1中,标题为 “RGB Original Image”。 imread 函数:读取参数图片,得到矩阵/数组 figure 函数:创建一个用来...imshow 函数:显示图像 title:显示图像的标题
  • 题目:自定义一个函数,将输入图像(EXP3A.tif)进行直方图均衡化处理,该函数输入参数为处理前的图像,输出参数为处理后的图像和直方图均衡化过程的变换函数,并画出直方图均衡化处理过程中的变换函数。 提示:直方...
  • matlab中imresize函数

    万次阅读 多人点赞 2015-09-08 16:25:39
    函数功能:该函数用于对图像做缩放处理。 调用格式: B = imresize(A, m) 返回的图像B的长宽是图像A的长宽的m倍,即缩放图像。 m大于1, 则放大图像; m小于1, 缩小图像。 B = imresize(A,
  • HLS图像处理系列——前言

    千次阅读 2015-06-28 19:41:35
    相对于Verilog实现硬件图像处理模块,它的开发过程更简便,方便地支持浮点运算,并且封装了多种图像处理函数(如直方图均衡,窗运算等),以及数学运算函数(三角函数,开方等)。 博主学习并使用HLS工具一年有余,...
  • Matlab中的graythresh函数

    万次阅读 多人点赞 2016-09-19 20:42:36
    Matlab中的graythresh函数在自己写专利的时候,想做一个对比算法(KI阈值法),但是在查的时候误打误撞找到一个graythresh函数,觉得挺有用,尤其是对图像处理。 graythresh(image)函数输入是一副图像,在我做的...
  • 数字图像处理之灰度变换

    千次阅读 2017-06-25 10:31:34
    灰度变换是图像处理技术中的最简单的技术。 图像增强常用的三类基本函数: 1. 线性函数(反转和恒等变换) 2. 对数函数(对数和反对数变换) 3. 幂律函数(n次幂和n次根变换)基本灰度变换函数如图: 直方图...
  • Matlab图像处理之灰度变换函数

    万次阅读 2016-04-20 19:09:39
    1,灰度:对于通常所谓的黑白图像,把黑色和白色之间按对数关系分为若干等级称为灰度。灰度分为256阶,用灰度表示的图像称作灰度图.在图像中用0~255表示,0是全黑,255是全白 2.对比度:对比度值一幅图像中敏感区域...
  • 高斯函数及其各阶导数

    万次阅读 2013-06-05 18:21:35
    图像处理中经常要用到高斯函数,高斯滤波是典型的低通滤波,对图像有平滑作用。高斯函数的一阶、二阶导数也可以进行高通滤波,比如canny算子中用到的是高斯函数的一阶导数,LOG算子中用到的是高斯函数的二阶导数。...
  • 1、imadjust()函数调节图像的对比度(若图像较暗,可用imadjust函数命令来调节图像的对比度)I1=imadjust(I,stretchlim(I),[0;1]); % stretchlim(I2)自适应找到一个分割阈值向量来改变一幅图像的对比度figure,imshow...
  • matlab中mat2gray函数用法

    万次阅读 2018-05-24 11:08:33
    函数在数字图像处理中经常用到。 函数简介 函数功能: 实现图像矩阵的归一化操作。[1] 所谓”归一化”就是使矩阵的每个元素的值都在0和1之间。该函数在数字图像处理中经常用到。 在matlab命令窗口中输入: doc ...
1 2 3 4 5 ... 20
收藏数 300,154
精华内容 120,061
关键字:

图像处理函数