2014-12-07 10:37:41 twobqn123 阅读数 489
  • TensorFlow 实战教程:如何用卷积神经网络打造图片...

    AI100 特邀阿里2017 云栖大会 API Solution大赛一等奖团队的联合创始人智亮先生,他将给大家介绍当前图像识别领域中先进的深度学习模型,并从源码级给大家讲解Tensorflow实现工业级图像识别应用的详细过程。通过本次公开分享课程大家将能掌握从零开始使用Tensorflow搭建一个图像识别引擎,包括训练、评估及服务的能力。

    19316 人正在学习 去看看 AI100讲师
1.使用模板处理图像相关概念:     

      模板:矩阵方块,其数学含义是卷积运算。
      卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积核(权矩阵)的每个元素对应相
                乘,所有乘积之和作为区域中心像素的新值。
      卷积核:卷积时使用到的权用一个矩阵表示,该矩阵使用的图像区域大小相同,其行、列都是奇数,
              是一个权矩阵。
      卷积示例:
              3 * 3 的像素区域R与卷积核G的卷积运算:
              R5(中心像素)=R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9
            

2.使用模板处理图像的问题:
       边界问题:当处理图像边界像素时,卷积与图像使用区域不能匹配,卷积核的中心边界像素点对应,
                 卷积运算将出现问题。
       处理办法:
              A. 忽略边界像素,即处理后的图像将丢掉这些像素。
              B. 保留原边界像素,即copy边界像素到处理后的图像

3.常用模板


如果你刚刚接触图像处理,或者离开大学很长时间,看到卷积这个东西,肯定和我样感到晕菜.那么就复习下,并且实际的写个程序验证下,我保证你这辈子不会再忘记卷积的概念了.我们来看卷积的概念.
连续空间的卷积定义是 f(x)g(x)的卷积是 f(t-x)g(x) 在t从负无穷到正无穷的积分值.t-x要在f(x)定义域内,所以看上去很大的积分实际上还是在定范围的.
实际的过程就是f(x) 先做一个Y轴的反转,然后再沿X轴平移t就是f(t-x),然后再把g(x)拿来,两者乘积的值再积分.想象下如果g(x)或者f(x)是个单位的阶越函数. 那么就是f(t-x)g(x)相交部分的面积.这就是卷积了.
把积分符号换成求和就是离散空间的卷积定义了.那么在图像卷积卷积地是什么意思呢,就是图像就是图像f(x),模板是g(x),然后将模版g(x)在模版中移动,每到一个位置,就把f(x)g(x)的定义域相交的元素进行乘积并且求和,得出新的图像一点,就是被卷积后的图像. 模版又称为卷积核.卷积核做一个矩阵的形状.
卷积定义上是线性系统分析经常用到的.线性系统就是一个系统的输入和输出的关系是线性关系.就是说整个系统可以分解成N多的无关独立变化,整个系统就是这些变化的累加.
如 x1->y1, x2->y2; 那么A*x1 + B*x2 -> A*y1 + B*y2 这就是线性系统. 表示一个线性系统可以用积分的形式 如 Y = Sf(t,x)g(x)dt S表示积分符号,就是f(t,x)表示的是A B之类的线性系数.
看上去很像卷积呀,,对如果f(t,x) = F(t-x) 不就是了吗.从f(t,x)变成F(t-x)实际上是说明f(t,x)是个线性移不变,就是说 变量的差不变化的时候,那么函数的值不变化. 实际上说明一个事情就是说线性移不变系统的输出可以通过输入和表示系统线性特征的函数卷积得到.

2015-11-03 20:59:34 u012300569 阅读数 581
  • TensorFlow 实战教程:如何用卷积神经网络打造图片...

    AI100 特邀阿里2017 云栖大会 API Solution大赛一等奖团队的联合创始人智亮先生,他将给大家介绍当前图像识别领域中先进的深度学习模型,并从源码级给大家讲解Tensorflow实现工业级图像识别应用的详细过程。通过本次公开分享课程大家将能掌握从零开始使用Tensorflow搭建一个图像识别引擎,包括训练、评估及服务的能力。

    19316 人正在学习 去看看 AI100讲师

介绍一下卷积:就是一种算子 

直接上例子:

[ 1 2 3 4 5 4 3 2 1] (《==原始向量)卷积 [ 2 0 -2] (《=卷积模板 )

过程:

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] (零填充)

[-2 0 2]《----[ 2 0 -2]     (翻转180度)

↓  (开始)

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

[-2 0 2]

↓ (结果 [0 2 1 2 3 4 5 4 3 2 1 0 0] )

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

   [-2 0 2]

↓ (结果 [0 2 4 2 3 4 5 4 3 2 1 0 0] )

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

      [-2 0 2]

↓ (结果 [0 2 4 4 3 4 5 4 3 2 1 0 0] )

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

         [-2 0 2]

↓ (结果 [0 2 4 4 4 4 5 4 3 2 1 0 0] )

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

            [-2 0 2]

↓ (结果 [0 2 4 4 4 4 5 4 3 2 1 0 0] )

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

               [-2 0 2]

↓ (结果 [0 2 4 4 4 4 0 4 3 2 1 0 0] )

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

                  [-2 0 2]

↓ (结果 [0 2 4 4 4 4 0 -4 3 2 1 0 0] )

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

                     [-2 0 2]

↓ (结果 [0 2 4 4 4 4 0 -4 -4 2 1 0 0] )

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

                        [-2 0 2]

↓ (结果 [0 2 4 4 4 4 0 -4 -4 -4 1 0 0] )

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

                           [-2 0 2]

↓ (结果 [0 2 4 4 4 4 0 -4 -4 -4 -4 0 0] )

[ 0 0 1 2 3 4 5 4 3 2 1 0 0] 

                              [-2 0 2]

↓ (结果 [0 2 4 4 4 4 0 -4 -4 -4 -4 -2 0] )

[0 2 4 4 4 4 0 -4 -4 -4 -4 -2 0] 《===(全部卷积结果)

[4 4 4 4 0 -4 -4 -4 -4] 《===(裁截后的卷积结果)

下面来个图片的卷积:

A卷积G


原始图片像素阵A如下:

               

1 3 2 0 4                    

1 0 3 2 3 

0 4 1 0 5 

 2 3 2 1 4

 3 1 0 4 2 

卷积模板 G

-1 0 1

-2 0 2

-1 0 1



原始图做零填充结果 9*9        

 0 0 0 0 0 0 0 0 0                   

 0 0 0 0 0 0 0 0 0                

 0 0 1 3 2 0 4 0 0                    

 0 0 1 0 3 2 3 0 0

 0 0 0 4 1 0 5 0 0

 0 0 2 3 2 1 4 0 0

 0 0 3 1 0 4 2 0 0

 0 0 0 0 0 0 0 0 0 

 0 0 0 0 0 0 0 0 0

 

模板做180度翻转结果3*3

1 0 -1

2 0 -2

1 0 -1

 

开始做卷积 

第1次蓝色为模板作用区域

 0 0 0 0 0 0 0 0 0                

 0 0 0 0 0 0 0 0 0                

 0 0 1 3 2 0 4 0 0                

 0 0 1 0 3 2 3 0 0

 0 0 0 4 1 0 5 0 0

 0 0 2 3 2 1 4 0 0

 0 0 3 1 0 4 2 0 0

 0 0 0 0 0 0 0 0 0 

 0 0 0 0 0 0 0 0 0

 

 

 

 

 

 

 

 

 第1次卷积结果

 0 0 0 0 0 0 0 0 0                

 0 -1 0 0 0 0 0 0 0                

 0 0 1 3 2 0 4 0 0                

 0 0 1 0 3 2 3 0 0

 0 0 0 4 1 0 5 0 0

 0 0 2 3 2 1 4 0 0

 0 0 3 1 0 4 2 0 0

 0 0 0 0 0 0 0 0 0 

 0 0 0 0 0 0 0 0 0

 

第2次蓝色为模板作用区域

 0 0 0 0 0 0 0 0 0                

 0 0 0 0 0 0 0 0 0                

 0 0 1 3 2 0 4 0 0                

 0 0 1 0 3 2 3 0 0

 0 0 0 4 1 0 5 0 0

 0 0 2 3 2 1 4 0 0

 0 0 3 1 0 4 2 0 0

 0 0 0 0 0 0 0 0 0 

 0 0 0 0 0 0 0 0 0

第2次卷积结果

 0 0 0 0 0 0 0 0 0                

 0 -1 -3 0 0 0 0 0 0                

 0 0 1 3 2 0 4 0 0                

 0 0 1 0 3 2 3 0 0

 0 0 0 4 1 0 5 0 0

 0 0 2 3 2 1 4 0 0

 0 0 3 1 0 4 2 0 0

 0 0 0 0 0 0 0 0 0 

 0 0 0 0 0 0 0 0 0

 

第3次蓝色为模板作用区域

 0 0 0 0 0 0 0 0 0                

 0 0 0 0 0 0 0 0 0                

 0 0 1 3 2 0 4 0 0                

 0 0 1 0 3 2 3 0 0

 0 0 0 4 1 0 5 0 0

 0 0 2 3 2 1 4 0 0

 0 0 3 1 0 4 2 0 0

 0 0 0 0 0 0 0 0 0 

 0 0 0 0 0 0 0 0 0

 

 

第3次卷积结果

 0 0 0 0 0 0 0 0 0                

 0 -1 -3 -1 0 0 0 0 0                

 0 1 3 2 0 4 0 0                

 0 0 1 0 3 2 3 0 0

 0 0 0 4 1 0 5 0 0

 0 0 2 3 2 1 4 0 0

 0 0 3 1 0 4 2 0 0

 0 0 0 0 0 0 0 0 0 

 0 0 0 0 0 0 0 0 0

 

。。。。。。。。经过漫长的模板移动。。。。。。。。。。

 

第49次蓝色为模板作用区域

 0 0 0 0 0 0 0 0 0                

 0 0 0 0 0 0 0 0 0                

 0 0 1 3 2 0 4 0 0                

 0 0 1 0 3 2 3 0 0

 0 0 0 4 1 0 5 0 0

 0 0 2 3 2 1 4 0 0

 0 0 3 1 0 4 2 0 0

 0 0 0 0 0 0 0 0 0 

 0 0 0 0 0 0 0 0 0

第49次卷积结果

 0 0  0  0  0  0  0  0  0                

 0 -1  -3 -1 -3  -2  0  4  0                

 0 -3  -6  -4  4  -4  2  11  0                

 0 -3  -7  -6  3  -6  2  15  0

 0 -3  -11 -4 8 -10  3  17  0

 0 -7 -11  2  5 -10  6  15  0

 0 -8  -5  6 -4  -6  9  8  0

 0 3  1  3  -3  -2  4  2  0 

 0 0  0  0  0  0  0  0  0

 

裁截后的卷积结果

              

-6  -4  4  -4  2             

-7  -6  3  -6  2

-11 -4  8 -10  3  

-11  2  5 -10  6  

-5  6 -4  -6  9  




2015-06-24 15:35:36 Quincuntial 阅读数 5351
  • TensorFlow 实战教程:如何用卷积神经网络打造图片...

    AI100 特邀阿里2017 云栖大会 API Solution大赛一等奖团队的联合创始人智亮先生,他将给大家介绍当前图像识别领域中先进的深度学习模型,并从源码级给大家讲解Tensorflow实现工业级图像识别应用的详细过程。通过本次公开分享课程大家将能掌握从零开始使用Tensorflow搭建一个图像识别引擎,包括训练、评估及服务的能力。

    19316 人正在学习 去看看 AI100讲师
1.使用模板处理图像相关概念:     

      模板:矩阵方块,其数学含义是一种卷积运算。
    卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积核(权矩阵)的每个元素对应相
 乘,所有乘积之和作为区域中心像素的新值。
    卷积核:卷积时使用到的权用一个矩阵表示,该矩阵与使用的图像区域大小相同,其行、列都是奇数,是一个权矩阵。
    卷积示例:
              3 * 3 的像素区域R与卷积核G的卷积运算:
              R5(中心像素)=R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9

            

2.使用模板处理图像的问题:


       边界问题:当处理图像边界像素时,卷积核与图像使用区域不能匹配,卷积核的中心与边界像素点对应,
                 卷积运算将出现问题。
       处理办法:
              A. 忽略边界像素,即处理后的图像将丢掉这些像素。
              B. 保留原边界像素,即copy边界像素到处理后的图像。

3、常用模板:





4、一维卷积的概念

卷积(convolution,另一个通用名称是德文的Faltung)的名称由来,是在于当初定义它时,定义成

integ(f1(v)*f2(t-v))dv,积分区间在0t之间。举个简单的例子,大家可以看到,为什么叫卷积了。

比方说在(0100)间积分,用简单的辛普生积分公式,积分区间分成100等分,那么看到的是f1(0)

f2(100)相乘,f1(1)f2(99)相乘,f1(2)f2(98)相乘,.........等等等等,就象是在坐标轴上回卷一样。

所以人们就叫它回卷积分,或者卷积了。

    连续空间的卷积定义是f(x)g(x)的卷积是f(t-x)g(x)t从负无穷到正无穷的积分值.t-x要在f(x)定义域内,所以看上去很大的积分实际上还是在一定范围的.
       
实际的过程就是f(x)先做一个Y轴的反转,然后再沿X轴平移t就是f(t-x),然后再把g(x)拿来,两者乘积的值再积分.想象一下如果g(x)或者f(x)是个单位的阶越函数.那么就是f(t-x)g(x)相交部分的面积.这就是卷积了.

    卷积运算满足交换律,也就是说:fg进行卷积完全等于gf进行卷积。

   由两个函数fg进行卷积而得到的函数f*g,一般要比原来的fg都要光滑。所以在图像处理中对图像进行卷积后会使原图像模糊。因为卷积具有平滑作用。

    有趣的是,如果把两个人的照片互相进行卷积,所得到的照片,就同时和这两个人都很相像。

把积分符号换成求和就是离散空间的卷积定义了.

   那么在图像中卷积是什么意思呢,就是图像就是图像f(x),模板是g(x),然后将模版g(x)在模版中移动,每到一个位置,就把f(x)g(x)的定义域相交的元素进行乘积并且求和,得出新的图像一点,就是被卷积后的图像.模版又称为卷积核.卷积核做一个矩阵的形状。

5、图像滤波

像处理和分析的有效性和可靠性。(滤波就是要去除没用的信息,保留有用的信息,可能是低频,也可能是高频)

(2)滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;  另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声。

对滤波处理的要求有两条:一是不能损坏图像的轮廓及边缘等重要信息;二是使图像清晰视觉效果好。

(3)图像的滤波方法: 

(一)图像的滤波方法很多,主要可以分为频率域法和空间域法两大类。频率域法的处理是在图像的某种变换域内,对图像的变换系数值进行运算,然后通过逆变换获得增强图像。这是一种间接的图像滤波方法。空间滤波方法是一类直接的滤波方法,它在处理图像时直接对图像灰度作运算。

     <1>频率域滤波:是将图像从空间或时间域转换到频率域,再利用变换系数反映某些图像特征的性质进行图像滤波的方法。傅立叶变换是一种常用的变换。在傅立叶变换域,频谱的直流分量正比于图像的平均亮度,噪声对应于频率较高的区域,图像实体位于频率较低的区域。图像在变换具有的这些内在特性可被用于图像滤波。可以构造一个低通滤波器,使低频分量顺利通过而有效地阻于高频分量,即可滤除图像的噪声,再经过反变换来取得平滑的图像。

          低通的数学表达式如下式所示:
                                      

          式中F (u, v)一含有噪声的原图像的傅立叶变换;
          H (u, v)一为传递函数,也称转移函数(即低通滤波器);
          G (u, v)一为经低通滤波后输出图像的傅立叶变换。
          H滤波滤去高频成分,而低频信息基本无损失地通过。滤波后,经傅立叶变换反变换可得平滑图像,即
          选择适当的传递函数H (u, v),对频率域低通滤波关系重大。常用的传递函数有梯形函数、指数函数、巴特沃思函数等。
          频域常用的几种低通滤波器为理想低通滤波器(Ideal  circular Iow-passfilter)、巴特沃思(Butterworth)低通滤波器、指数低通滤波器及梯形低通滤波器。这些低通滤波器,都能在图像内有噪声干扰成分时起到改善的作用。
      <2>常用的平面空间域滤波法有两类:  

          一类是拟合图像的方法,包括n阶多项式拟合、离散正交多项式拟合、二次曲面拟合等多种方法; 

          另一类是平滑图像的方法,包括领域平均法、中值滤波法、梯度倒数加权法、选择式掩模法等。

(二)按频率高低

      <1>高通滤波:边缘提取与增强。边缘区域的灰度变换加大,也就是频率较高。所以,对于高通滤波,边缘部分将被保留,非边缘部分将被过滤;

      <2>低通滤波:边缘平滑,边缘区域将被平滑过渡。

         附: 高斯滤波:高斯滤波是一种线性平滑滤波,即低通滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由本身和邻域内的其他像素值经过加权平均后得到。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。3×3的掩模如下:

                                             1 2 1

                                             2 4 2

                                             1 2 1 * 1/16

从结构化掩模中可以看到,处于掩模中心的位置比其他任何像素的权值都大,因此在均值计算中给定的这一像素显得更为重要。而距离掩模中心较远的像素就显得不太重要,这样做是为了减小平滑处理中的模糊。

(三)线性与非线性滤波

 <1>线性滤波:线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如(1)均值滤波器(模板内像素灰度值的平均值)、(2)高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换)。

<span style="font-size:18px;"> <2>非线性滤波:非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器、最小值滤波器、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换),另外,膨胀和腐蚀也是通过最大值、最小值滤波器实现的。五种常见的非线性滤波算子,这五种滤波算子对不同的图像都会有不同的作用,最常用的是中值滤波,因为它的效果最好且信息损失的最少。</span>

(1)极大值滤波

极大值滤波就是选取像素点领域的最大值作为改点的像素值,有效率去了灰度值比较低的噪声,也可作为形态学里面的膨胀操作。

极大值滤波可以表示为: Maximum(A)=max[A(x+i,y+j)]      (x,y)属于M

注:(x+i,y+j)是定义在图像上的坐标,(i,j)是定义在模板M上的坐标。M即为运算的模板。

(2)极小值滤波(与极大值滤波相反)

(3)中点滤波

 中点滤波常用于去除图像中的短尾噪声,例如高斯噪声和均匀分布噪声。终点滤波器的输出时给定窗口内灰度的极大值和极小值的平均值;

 Midpoint(A)=(max[A(x+i,y+j)]+min[A(x+i,y+j)])/2         

 (x,y)属于M 注:(x+i,y+j)是定义在图像上的坐标,(i,j)是定义在模板M上的坐标。M即为运算的模板。

(4)中值滤波

中值滤波可以消除图像中的长尾噪声,例如负指数噪声和椒盐噪声。在消除噪声时,中值滤波对图像噪声的模糊极小(受模板大小的影响),中值滤波实质上是用模板内所包括像素灰度的中值来取代模板中心像素的灰度。中值滤波在消除图像内椒盐噪声和保持图像的空域细节方面,其性能优于均值滤波。

       Median(A)=Median[A(x+i,y+j)]              (x,y)属于M

注:(x+i,y+j)是定义在图像上的坐标,(i,j)是定义在模板M上的坐标。M即为运算的模板。

(5)加权中值滤波(中值滤波的改进)

加权中值滤波是在中值滤波的基础上加以改进,其性能在一定程度上优于中值滤波。

 例:

 若模板的大小为5,那么这个模板就唯一确定为:

             1  1  5   1   1   

             1  1  5   1   1  

             5  5  5   5   5   

             1  1  5   1   1  

             1  1  5   1   1   

    上图中的数字表式改点像素在序列中出现的次数。然后根据模板平滑图像。实验证明该方法好于传统中值滤波。当然还有其他方法;

<span style="font-size:18px;">附:噪声
    高斯噪声:是指噪声服从高斯分布,即某个强度的噪声点个数最多,离这个强度越远噪声点个数越少,且这个规律服从高斯分布。高斯噪声是一种加性噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除。
    椒盐噪声:类似把椒盐撒在图像上,因此得名,是一种在图像上出现很多白点或黑点的噪声,如电视里的雪花噪声等。椒盐噪声可以认为是一种逻辑噪声,用线性滤波器滤除的结果不好,一般采用中值滤波器滤波可以得到较好的结果</span>

3.图像平滑

图像平滑 image smoothing: 压制、弱化或消除图像中的细节、突变、边缘和噪声,就是图像平滑化。图像平滑是对图像作低通滤波,可在空间域或频率域实现。空间域图像平滑方法主要用低通卷积滤波、中值滤波等;频率域图像平滑常用的低通滤波器有低通梯形滤波器、低通高斯滤波器、低通指数滤波器、巴特沃思低通滤波器等。

关系:

图像卷积:一种实现手段,不管是滤波还是别的什么,可以说是数学在图像处理的一种延伸。

图像滤波:一种图像处理方法,来实现不同目的。

图像平滑:实际上就是低通滤波。





2013-08-18 20:18:22 GoodShot 阅读数 5676
  • TensorFlow 实战教程:如何用卷积神经网络打造图片...

    AI100 特邀阿里2017 云栖大会 API Solution大赛一等奖团队的联合创始人智亮先生,他将给大家介绍当前图像识别领域中先进的深度学习模型,并从源码级给大家讲解Tensorflow实现工业级图像识别应用的详细过程。通过本次公开分享课程大家将能掌握从零开始使用Tensorflow搭建一个图像识别引擎,包括训练、评估及服务的能力。

    19316 人正在学习 去看看 AI100讲师

图像处理中的卷积与模板

1.使用模板处理图像相关概念:      

     模板:矩阵方块,其数学含义是一种卷积运算。

  卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别与卷积核(权矩阵)的每个元素对应相乘,所有乘积之和作为区域中心像素的新值。

     卷积核:卷积时使用到的权,用一个矩阵表示,该矩阵与使用的图像区域大小相同,其行、列都是奇数,是一个权矩阵。

     卷积示例:

             假设3 * 3的像素区域R与卷积核G分别为:


则卷积运算为:

              R5(中心像素)=R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9

           

 

2、使用模板处理图像时涉及到的问题:

      边界问题:当处理图像边界像素时,卷积核与图像使用区域不能匹配,卷积核的中心与边界像素点对应,卷积运算将出现问题。

      处理办法:

              A.忽略边界像素,即处理后的图像将丢掉这些像素。

              B.保留原边界像素,即copy边界像素到处理后的图像。

 

3、常用模板:

      (a)低通滤波器

                             
 

   (b)高通滤波器                 

                       

   (c)平移和差分边缘检测

                      

    (d)匹配滤波边缘检测

                       

 

    (e)边缘检测

                           

 

    (f)梯度方向边缘检测

                      

 

                     

        

 

4、我们来看一下一维卷积的概念.

    卷积(convolution,另一个通用名称是德文的Faltung)的名称由来,是在于当初定义它时,定义成integ(f1(v)*f2(t-v))dv,积分区间在0到t之间。举个简单的例子,大家可以看到,为什么叫“卷积”了。比方说在(0,100)间积分,用简单的辛普生积分公式,积分区间分成100等分,那么看到的是f1(0)和f2(100)相乘,f1(1)和f2(99)相乘,f1(2)和f2(98)相乘,.........等等等等,就象是在坐标轴上回卷一样。所以人们就叫它“回卷积分”,或者“卷积”了。

    连续空间的卷积定义是f(x)与g(x)的卷积是f(t-x)g(x)在t从负无穷到正无穷的积分值.t-x要在f(x)定义域内,所以看上去很大的积分实际上还是在一定范围的.
       实际的过程就是f(x)先做一个Y轴的反转,然后再沿X轴平移t就是f(t-x),然后再把g(x)拿来,两者乘积的值再积分.想象一下如果g(x)或者f(x)是个单位的阶越函数.那么就是f(t-x)与g(x)相交部分的面积.这就是卷积了.

    卷积运算满足交换律,也就是说:f与g进行卷积完全等于g与f进行卷积。

   由两个函数f和g进行卷积而得到的函数f*g,一般要比原来的f和g都要光滑。所以在图像处理中对图像进行卷积后会使原图像模糊。因为卷积具有平滑作用。

    有趣的是,如果把两个人的照片互相进行卷积,所得到的照片,就同时和这两个人都很相像。

把积分符号换成求和就是离散空间的卷积定义了.

   那么在图像中卷积是什么意思呢,就是图像就是图像f(x),模板是g(x),然后将模版g(x)在模版中移动,每到一个位置,就把f(x)与g(x)的定义域相交的元素进行乘积并且求和,得出新的图像一点,就是被卷积后的图像.模版又称为卷积核.卷积核做一个矩阵的形状。

5、卷积运算时的核函数

      在Matlab中,对图像进行卷积运算时,都要先得到一个核函数,其实就是模板。其函数调用是:

>> G=fspecial('gaussian',5,0.5)

G =

     0.0000    0.0000    0.0002    0.0000    0.0000

    0.0000    0.0113    0.0837    0.0113    0.0000

    0.0002    0.0837    0.6187    0.0837    0.0002

    0.0000    0.0113    0.0837    0.0113    0.0000

     0.0000    0.0000    0.0002    0.0000    0.0000

>> G=fspecial('gaussian',5,1.5)

G =

    0.0144    0.0281    0.0351    0.0281    0.0144

   0.0281    0.0547    0.0683    0.0547    0.0281

   0.0351    0.0683    0.0853    0.0683    0.0351

   0.0281    0.0547    0.0683    0.0547    0.0281

   0.0144    0.0281    0.0351    0.0281    0.0144

    能够看出来,fspesial()函数的第一个参数表示返回高斯核函数(低通滤波器、模板等名称其实都一样)。第二个参数“5”表示该模板的大小,是5X5的矩阵。第三个参数是sigma了。

2019-08-19 18:21:28 yeweij226 阅读数 481
  • TensorFlow 实战教程:如何用卷积神经网络打造图片...

    AI100 特邀阿里2017 云栖大会 API Solution大赛一等奖团队的联合创始人智亮先生,他将给大家介绍当前图像识别领域中先进的深度学习模型,并从源码级给大家讲解Tensorflow实现工业级图像识别应用的详细过程。通过本次公开分享课程大家将能掌握从零开始使用Tensorflow搭建一个图像识别引擎,包括训练、评估及服务的能力。

    19316 人正在学习 去看看 AI100讲师

本次我们来谈一下图像处理的卷积基础(java语言)

多图预警

首先我们来接触一下卷积的基础理论

卷积我们可以看成两个矩阵进行一定规律的计算(这里不是矩阵相乘啥的),其中有一个模板矩阵,我们称之为卷积核
such as this
在这里插入图片描述
但是深度学习图像处理中的卷积操作是与数学概率论中的卷积操作有着一定的区别的,数学的卷积需要进行卷积核翻转,但图像处理中大部分情况下是直接的一对一相乘而不翻转,即计算方法有着区别

而卷积操作基本是分成三步
1、输入(input)
2、卷积计算(也叫做特征提取)
3、输出(output,也叫做特征映射)

首先是输入,图像处理中我们输入的是图像的颜色参数(rgb)
在这里插入图片描述
然后我们进行卷积
卷积操作为卷积核与像素点的元素对应相乘
卷积
其中蓝色矩阵代表输入的矩阵,深蓝色中的小数字组成的矩阵是卷积核
在图像中是这个样子的
在这里插入图片描述

在这里插入图片描述
通过卷积操作我们可以将两个二维数组变成一个具有特定意义的数(在这里是某块像素区域的R值加权和,权由卷积核决定,这种操作在图像中也叫做线性滤波),然后可以将卷积产生的数字赋给一个位置(通常赋给被处理矩阵的中心位置),在这里我们赋到中心位

将卷积核在整个图像中滑遍,即可将整个图像进行特征提取,如图所示(由下到上)
在这里插入图片描述
在这里插入图片描述
将整个图像处理完之后,我们会发现一个问题:
图像边缘的像素点是没有处理到的(如图)
在这里插入图片描述
会有几种常见的办法处理图像边缘
1、直接舍掉边缘未处理区域,也就是说输出的只有绿色部分,当然这种办法无法输出全部图像,因而很少使用
2、Padding(填充周围):使用一些假像素(通常是0)来填充边缘,从而产生与输入相同大小的输出。 (借鉴数字图像处理中滤波和卷积操作详细说明)这位博主的边缘处理
在这里插入图片描述
3、Striding(步幅增大):使用更大的滑动步幅,常见于图像缩小时(池化)的操作,这里不再赘述
(4、不管边缘,就是如果边缘占比足够小而且对输出结果没啥影响时的操作)

通过边缘的处理,我们最终会得到处理后的图像数据,特征提取完成,输出即可完成特征映射(在这篇文章中我将图像显示当成特征映射)

二维卷积(即两个矩阵的操作)常见于灰度图的操作(例如3*3的卷积核与3x3的处理区域),三维卷积由于有三个需要处理的像素区域(即r,g,b,3x3x3),因而常见于处理彩色图像,我们在这里操作的大部分是三维的彩色图像

卷积的部分代码如下(以锐化为例,边缘处理代码暂无)

		//对于不同的功能设置不同大小的矩阵
		if(text.equals("锐化")){size = 3;}	
		//锐化卷积核
		double[][] sharpening = {{-1,-1,-1},{-1,9,-1},{-1,-1,-1}};
		//下面开始搞卷积算法
		//初始化rgb数组
		R = new int[size][size];
		G = new int[size][size];
		B = new int[size][size];
		//对应3*3的像素格子进行卷积计算
		for(int x = 0;x < width-size+1;x++){
			for(int y = 0;y < height-size+1;y++){
			//设置三个值分别存储r,g,b的特征值,一定要在循环内部进行初始化0,这样才能每次有不同的值
				int resultOfR = 0;
				int resultOfG = 0;
				int resultOfB = 0;
				//将格子的rgb值都取出,便于之后的卷积操作
				for(int j = 0;j <size;j++){
					for(int i = 0;i < size;i++){
						//将该点的RGB信息取出,放到变量中待操作
						int argb = rgbOfImg[x][y];
						//分段获取其R,G,B信息
						//int变量共4位32字节,0位对应透明度(A),1位对应R值,2位对应G值,3位对应B值
						//>>操作:将二进制代码向右移动,左边空位根据符号补充,正号为0,负号为1,右边超过范围的全部舍弃
						//&:二进制位与运算符,只有两个变量对应值均为1时该位才返回1,0xff表示全为1的十六进制数(11111111),因此任何与0xff进行位与的结果均为其本身
						//先移位后取位与可以将不同值对应的位信息取出,位与的意义是只取32字节的后8字节
						R[i][j] = argb>>16 & 0xff;
						G[i][j] = argb>>8  & 0xff;
						B[i][j] = argb     & 0xff;
					}
				}
				if(text.equals("锐化")){
					//分别对R,G,B进行卷积操作,对应相乘后加起来
					for(int j = 0;j < size;j++){
						for(int i = 0;i < size;i++){
							resultOfR += (int)(sharpening[i][j]*R[i][j]);
						}	
					}
					for(int i = 0;i < size;i++){
						for(int j = 0;j < size;j++){
							resultOfG += (int)(sharpening[i][j]*G[i][j]);
		
						}
					}				
					for(int i = 0;i < size;i++){
						for(int j = 0;j < size;j++){
							resultOfB += (int)(sharpening[i][j]*B[i][j]);
						}
					}
				}
				//如果超过了rgb的界限(0-255),将其按照最大值或最小值处理
				if(resultOfR > 255)resultOfR = 255;
				if(resultOfR < 0)resultOfR = 0;
				if(resultOfG > 255)resultOfG = 255;
				if(resultOfG < 0)resultOfG = 0;
				if(resultOfB > 255)resultOfB = 255;
				if(resultOfB < 0)resultOfB = 0;
				//根据该rgb值创建颜色对象
				Color color = new Color(resultOfR, resultOfG, resultOfB);
				//设置颜色,其中graphics是图像的画布(见BufferedImage类与Graphics类)
				graphics.setColor(color);
				//画像素点(drawline用来画线,这里的起始与终点都是同一点,因此可以用来画像素点)
				//size/2用来将像素点赋到中心元上
				graphics.drawLine(x+size/2, y+size/2, x+size/2, y+size/2);
				}
		}
下面我们来看一些常见的算子或效果的卷积核产生的效果吧

首先说明:卷积核内的数据相加为1时亮度不变,小于1时亮度降低,大于1时亮度升高

锐化
在这里插入图片描述
在这里插入图片描述

平滑模糊
在这里插入图片描述
在这里插入图片描述
高斯模糊(在这里先不详述如何生成高斯模板,有兴趣的同学可以看我的文章内高斯模板的相关内容)
这里使用5*5模板,看上去更有效果
在这里插入图片描述
在这里插入图片描述
浮雕
在这里插入图片描述
在这里插入图片描述
强调边缘
在这里插入图片描述
在这里插入图片描述

没有更多推荐了,返回首页