精华内容
下载资源
问答
  • 基于盲去卷积原理的图像复原程序代码, 露西-理查德森算法属于图像复原中的非线性算法,与维纳滤波这种较为直接的算法不同,该算法使用非线性迭代技术,在计算量、性能方面都有了一定提升。
  • 去卷积原理及在图像复原的应用

    万次阅读 多人点赞 2017-03-28 21:01:57
    去卷积原理及在图像复原的应用

    前言

           之前写过一篇维纳滤波在图像复原中的作用,讲述了图像退化模型以及维纳滤波的作用。维纳滤波使用的前提是知道信号和噪声的功率谱,但在实际应用中较难得到,只能根据先验知识进行估计。

           本文介绍盲去卷积复原算法,并在MATLAB中进行实验,和维纳滤波的复原效果进行一个对比。盲去卷积的方法有多种,本文主要介绍由fish提出的基于露西-理查德森(Richardson-Lucy)的盲去卷积算法。

    盲去卷积原理

         露西-理查德森算法属于图像复原中的非线性算法,与维纳滤波这种较为直接的算法不同,该算法使用非线性迭代技术,在计算量、性能方面都有了一定提升。

         露西-理查德森算法是由贝叶斯公式推导而来,因为使用了条件概率(即算法考虑了信号的固有波动,因此具有复原噪声图像的能力)。贝叶斯公式如下:

          结合图像退化/复原模型,可以得到迭代函数:

      

        其中 fi 就是第i轮迭代复原图像,对应贝叶斯公式中的p(x),g是退化函数,对应贝叶斯公式的p(y|x),c为退化图像(c(y)dy意为在退化图像上积分),如果满足等晕条件,即图像各区域的模糊函数相同,则迭代公式可化简如下:

         这就是路西-理查德森迭代公式,其中c是退化图像,g是退化函数,f是第k轮复原图像。如果系统的退化函数PSF(g(x))已知,只要有一个初始估计f就可以进行迭代求解了。在开始迭代后,由于算法的形式,估计值会与真实值的差距迅速减小,从而后续迭代过程f的更新速度会逐渐变慢,直至收敛。算法的另一优点就是初始值f>0,后续迭代值均会保持非负性,并且能量不会发散。

         盲去卷积需要两步进行复原,原因是我们既不知道原始图像f,也不知道退化函数g。求解过程示意图如下:

          即在第k轮迭代,我们假a设原始图像已知,即k-1轮得到的fk-1,再通过R-L公式求解gk,随后,再用gk求解fk,反复迭代,最后求得最终f和g。因此,在求解最初,我们需要同时假设一个复原图像f0和一个退化函数g0。迭代公式如下:

          此外,有人采用这种盲去卷积方法进行了相关实验,下图为实验原图:

    下图(a)左、右分别为附加标准差1.5%、10%泊松噪声的退化图像,图(b)左、右分别为1.5%的复原图像和PSF,图(c)为10%对应结果

         


    盲去卷积MATLAB实验

         将一幅原始图像,进行模糊处理(模拟大气湍流),分别使用维纳滤波(由于没加噪声,就是逆滤波)和盲去卷积进行复原,复原结果如下:


          下面是网上找到的有关盲去卷积的MATLAB程序,可以加深理解。
    %% Deblurring Images Using the Blind Deconvolution Algorithm 
    %%盲反卷积算法复原图像
    % The Blind Deconvolution Algorithm can be used effectively when no
    % information about the distortion (blurring and noise) is known. The
    % algorithm restores the image and the point-spread function (PSF)
    % simultaneously. The accelerated, damped Richardson-Lucy algorithm is used
    % in each iteration. Additional optical system (e.g. camera)
    % characteristics can be used as input parameters that could help to
    % improve the quality of the image restoration. PSF constraints can be
    % passed in through a user-specified function
    %在不知道图像失真信息(模糊和噪声)信息情况下,盲反卷积算法可以有效地加以利用。该算法
    %对图像和点扩展函数(PSF)的同时进行复原。每次迭代都使用加速收敛Richardson-Lucy 
    %算法。额外的光学系统(如照相机)的特性可作为输入参数,帮助改善图像复原质量。可以通
    %过用户指定的函数对PSF进行限制
    % Copyright 2004-2005 The MathWorks, Inc.
     
    %% Step 1: Read Image
    %%第一步:读取图像
    % The example reads in an intensity image. The |deconvblind| function can
    % handle arrays of any dimension.
    %该示例读取一个灰度图像。| deconvblind |函数可以处理任何维数组。
    I = imread('view.tif');
    figure;imshow(I);title('Original Image');
    %text(size(I,2),size(I,1)+15, ...
    %    'Image courtesy of Massachusetts Institute of Technology', ...
    %'FontSize',7,'HorizontalAlignment','right');  
       
    
     
    %% Step 2: Simulate a Blur
    %%第二步:模拟一个模糊
    % Simulate a real-life image that could be blurred (e.g., due to camera
    % motion or lack of focus). The example simulates the blur by convolving a
    % Gaussian filter with the true image (using |imfilter|). The Gaussian filter
    % then represents a point-spread function, |PSF|.
     %模拟一个现实中存在的模糊图像(例如,由于相机抖动或对焦不足)。这个例子通过对真实
    %图像进行高斯滤波器模拟图像模糊(使用|imfilter|)。高斯滤波器是一个点扩展函数,
    %|PSF|。
    PSF=fspecial('gaussian',7,10);
    Blurred=imfilter(I,PSF,'symmetric','conv');  %对图像I进行滤波处理;
    figure;imshow(Blurred);title('Blurred Image');  
    
       
    
     
    %% Step 3: Restore the Blurred Image Using PSFs of Various Sizes
    %%第三步:使用不同的点扩展函数复原模糊图像
    % To illustrate the importance of knowing the size of the true PSF, this
    % example performs three restorations. Each time the PSF reconstruction
    % starts from a uniform array--an array of ones.
    %为了说明知道真实PSF的大小的重要性,这个例子执行三个修复。PSF函数重建每次都是从统一
    %的全一数组开始。
    %%
    % The first restoration, |J1| and |P1|, uses an undersized array, |UNDERPSF|, for
    % an initial guess of the PSF. The size of the UNDERPSF array is 4 pixels
    % shorter in each dimension than the true PSF. 
    %第一次复原,|J1|和|P1|,使用一个较小数组,| UNDERPSF |,来对PSF的初步猜测。该
    %UNDERPSF数组每维比真实PSF少4个元素。
    UNDERPSF = ones(size(PSF)-4);
    [J1 P1] = deconvblind(Blurred,UNDERPSF);
    figure;imshow(J1);title('Deblurring with Undersized PSF'); 
    
       
    
    %%
    % The second restoration, |J2| and |P2|, uses an array of ones, |OVERPSF|, for an
    % initial PSF that is 4 pixels longer in each dimension than the true PSF.
    %第二次复原,|J2|和|P2|,使用一个元素全为1的数组,| OVERPSF|,初始PSF每维比真
    %实PSF多4个元素。
    OVERPSF = padarray(UNDERPSF,[4 4],'replicate','both');
    [J2 P2] = deconvblind(Blurred,OVERPSF);
    figure;imshow(J2);title('Deblurring with Oversized PSF');  
       
    
     
    %%
    % The third restoration, |J3| and |P3|, uses an array of ones, |INITPSF|, for an
    % initial PSF that is exactly of the same size as the true PSF.
    %第三次复原,|J3|和|P3|,使用一个全为一的数组| INITPSF |作为初次PSF,每维与真正
    %的PSF相同。
    INITPSF = padarray(UNDERPSF,[2 2],'replicate','both');
    [J3 P3] = deconvblind(Blurred,INITPSF);
    figure;imshow(J3);title('Deblurring with INITPSF');  
    
       
    
     
    %% Step 4: Analyzing the Restored PSF
    %%第四步:分析复原函数PSF
    % All three restorations also produce a PSF. The following pictures show
    % how the analysis of the reconstructed PSF might help in guessing the
    % right size for the initial PSF. In the true PSF, a Gaussian filter, the
    % maximum values are at the center (white) and diminish at the borders (black).
    %所有这三个复原也产生PSF。以下图片显示对PSF重建分析的如何可能有助于猜测最初PSF的大
    %小。在真正的PSF中,高斯滤波器的最高值在中心(白),到边界消失(黑)。
    figure;
    subplot(221);imshow(PSF,[],'InitialMagnification','fit');
    title('True PSF');
    subplot(222);imshow(P1,[],'InitialMagnification','fit');
    title('Reconstructed Undersized PSF');
    subplot(223);imshow(P2,[],'InitialMagnification','fit');
    title('Reconstructed Oversized PSF');
    subplot(224);imshow(P3,[],'InitialMagnification','fit');
    title('Reconstructed true PSF');  
    
       
    
     
    %% 
    % The PSF reconstructed in the first restoration, |P1|, obviously does not
    % fit into the constrained size. It has a strong signal variation at the
    % borders. The corresponding image, |J1|, does not show any improved clarity
    % vs. the blurred image,.
     %第一次复原的PSF,|P1|,显然不适合大小的限制。它在边界有一个强烈的变化信号。
    %相应的图片|J1|,与模糊图像|Blurred|比没有表现出清晰度提高。
    %%
    % The PSF reconstructed in the second restoration, |P2|, becomes very smooth
    % at the edges. This implies that the restoration can handle a PSF of a
    % smaller size. The corresponding image, |J2|, shows some deblurring but it
    % is strongly corrupted by the ringing.
     %第二次复原的PSF,|P2|,边缘变得非常平滑。这意味着复原可以处理一个更细致的
    %PSF。相应的图片|J2|,显得清晰了,但被一些“振铃”强烈破坏。
    %%
    % Finally, the PSF reconstructed in the third restoration, |P3|, is somewhat
    % intermediate between |P1| and |P2|. The array, |P3|, resembles the true PSF
    % very well. The corresponding image, |J3|, shows significant improvement;
    % however it is still corrupted by the ringing.
     %最后,第三次复原的PSF,|P3|,介于|P1|和|P2|之间。该阵列|P3|,非常接近真
    %正的PSF。相应的图片,|J3|,显示了显着改善,但它仍然被一些“振铃”破坏。
    
    
    %% Step 5: Improving the Restoration
    %%第五步:改善图像复原
    % The ringing in the restored image, |J3|, occurs along the areas of sharp
    % intensity contrast in the image and along the image borders. This example
    % shows how to reduce the ringing effect by specifying a weighting
    % function. The algorithm weights each pixel according to the |WEIGHT| array
    % while restoring the image and the PSF. In our example, we start by
    % finding the "sharp" pixels using the edge function. By trial and error,
    % we determine that a desirable threshold level is 0.3.
    %在复原图像|J3|内部灰度对比鲜明的地方和图像边界都出现了“振铃”。这个例子说明了如何
    %通过定义一个加权函数来减少图像中的“振铃”。该算法是在对图像和PSF进行复原时,对每个
    %像元根据|WEIGHT|数组进行加权计算。在我们的例子,我们从用边缘函数查找“鲜明”像元
    %开始。通过反复试验,我们确定理想的阈值为0.3。
    
    %WEIGHT = edge(I,'sobel',.3);  
     WEIGHT = edge(Blurred,'sobel',.3); 
    %%
    % To widen the area, we use |imdilate| and pass in a structuring element, |se|.
    %为了拓宽领域,我们使用|imdilate|并传递一个结构元素|se|。
    se = strel('disk',2);
    WEIGHT = 1-double(imdilate(WEIGHT,se));  
     
    %%
    % The pixels close to the borders are also assigned the value 0.
    %在边界附近像素的值也被分配为0。
    WEIGHT([1:3 end-[0:2]],:) = 0;
    WEIGHT(:,[1:3 end-[0:2]]) = 0;
    figure;imshow(WEIGHT);title('Weight array');  
    
       
    
     %%
    % The image is restored by calling deconvblind with the |WEIGHT| array and an
    % increased number of iterations (30). Almost all the ringing is suppressed.
    %该图像通过|WEIGHT|数组和增加重复次数(30)调用deconvblind函数来复原。几乎所
    %有的“振铃”被抑制。
    [J P] = deconvblind(Blurred,INITPSF,30,[],WEIGHT);
    figure;imshow(J);title('Deblurred Image');  
       
    
     
    %% Step 6: Using Additional Constraints on the PSF Restoration
    %第六步:使用附加约束对PSF复原
    % The example shows how you can specify additional constraints on the PSF.
    %这个例子说明了如何在PSF上指定额外的限制。
    % The function, |FUN|, below returns a modified PSF array which deconvblind
    % uses for the next iteration. 
    %函数|FUN|返还一个修改了的PSF数组,用作deconvblind函数的下一次重复。
    % In this example, |FUN| modifies the PSF by cropping it by |P1| and |P2| number
    % of pixels in each dimension, and then padding the array back to its
    % original size with zeros. This operation does not change the values in
    % the center of the PSF, but effectively reduces the PSF size by |2*P1| and
    % |2*P2| pixels. 
    %在这个例子中,通过对PSF数组各维数剪切|P1|和|P2|个值实现对PSF的修改,对数组填充
    %回零。此操作不会改变在PSF中心的值,而且有效地在各维减少了|2*P1|和| 2*P2|元
    %素。
     
    P1 = 2;
    P2 = 2;
    FUN = @(PSF) padarray(PSF(P1+1:end-P1,P2+1:end-P2),[P1 P2]);  
     
    %%
    % The anonymous function, |FUN|, is passed into |deconvblind| last.
    %该匿名函数|FUN|,最后传递给| deconvblind |。
    %%
    % In this example, the size of the initial PSF, |OVERPSF|, is 4 pixels larger
    % than the true PSF. Setting P1=2 and P2=2 as parameters in |FUN|
    % effectively makes the valuable space in |OVERPSF| the same size as the true
    % PSF. Therefore, the outcome, |JF| and |PF|, is similar to the result of
    % deconvolution with the right sized PSF and no |FUN| call, |J| and |P|, from
    % step 4.
    %在这个例子中,初始PSF,|OVERPSF|,每维比真正的PSF多4个像素,。设置P1=2和P2=2作
    %为|FUN|的参数,可有效地使|OVERPSF|与真正的PSF的大小相同。因此,得到的结果|JF|
    %和|PF|,与第四步不使用|FUN|而仅用正确尺寸PSF盲反卷积得到的结果|J|和|P|类似。
    [JF PF] = deconvblind(Blurred,OVERPSF,30,[],WEIGHT,FUN);
    figure;imshow(JF);title('Deblurred Image');  
    
       
    
     
    %%
    % If we had used the oversized initial PSF, |OVERPSF|, without the
    % constraining function, |FUN|, the resulting image would be similar to the
    % unsatisfactory result, |J2|, achieved in Step 3.
    %
    % Note, that any unspecified parameters before |FUN| can be omitted, such as
    % |DAMPAR| and |READOUT| in this example, without requiring a place holder,
    % ([]).
     %如果我们使用了没有约束的函数|FUN|的较大的初始PSF,| OVERPSF |,所得图像将类
    %似第3步得到的效果并不理想的|J2|。 
    %注意,任何在|FUN|之前未指定参数都可以省略,如|DAMPAR|和|READOUT|在这个例子中,而不需要指示他们的位置,([])。
     
    displayEndOfDemoMessage(mfilename) 
    


    展开全文
  • 卷积原理

    千次阅读 2018-05-13 15:17:20
    这里千万不要当成反卷积操作可以复原卷积操作的输入值,反卷积并没有那个功能,它仅仅是将卷积变换过程中的步骤反向变换一次而已,通过将卷积核转置,与卷积后的结果再做一遍卷积,所以它还有个名字叫转置卷积。...
    一 介绍
    反卷积,可以理解为卷积操作的逆运算。这里千万不要当成反卷积操作可以复原卷积操作的输入值,反卷积并没有那个功能,它仅仅是将卷积变换过程中的步骤反向变换一次而已,通过将卷积核转置,与卷积后的结果再做一遍卷积,所以它还有个名字叫转置卷积。
    虽然它不能还原出原来卷积的样子,但是在作用上具有类似的效果,可以将带有小部分缺失的信息最大化恢复,也可以用来恢复被卷积生成后的原始输入。
    反卷积具体步骤如下:
    1 首先是将卷积核反转(并不是转置,而是上下左右方向进行递序操作)。
    2 再将卷积结果作为输入,做补0扩充操作,即往每一个元素后面补0.这一步是根据步长来的,对于每个元素沿着步长方向补(步长-1)个0。例如,步长为1就不用补0了。
    3 在扩充后的输入基础上再对整体补0。以原始输入的shape作为输出,按照前面介绍的卷积padding规则,计算pading的补0的位置及个数,得到补0的位置及个数,得到补0的位置要上下和左右各自颠倒一下。
    4 将补0后的卷积结果作为真正的输入,反转后的卷积核为filter,进行步长为1的卷积操作。
    注意:计算padding按规则补0时,统一按照padding='SAME'、步长为1*1的方式来计算。
    二 举例
    上图上面部分展示:以一个[1,4,4,1]的矩阵为例,进行filter为2*2,步长为2*2的卷积操作。
    其反卷积操作步骤如上图下半部分。
    在反卷积过程中,首先将2*2矩阵通过步长补0的方式变成4*4,再通过padding反方向补0,然后与反转后的filter使用步长为1*1的卷积操作,最终得出结果。但是这个结果已经与原来的全1矩阵不等了,说明转置卷积只能恢复部分特征,无法百分百的恢复原始数据。
    展开全文
  • 卷积原理

    千次阅读 2019-11-28 16:34:36
    卷积原理 这是我第一次决定用一个音频版本来丰富我的作品,诚挚地邀请你来听一听,您将在上面找到Soundcloud的链接。在这篇文章中,我主要关注CNNs的一些典型问题。如果您正在寻找关于深度神经网络更基础的信息,我...

    卷积原理
    这是我第一次决定用一个音频版本来丰富我的作品,诚挚地邀请你来听一听,您将在上面找到Soundcloud的链接。在这篇文章中,我主要关注CNNs的一些典型问题。如果您正在寻找关于深度神经网络更基础的信息,我建议您阅读我在本系列文章中的其他文章(https://towardsdatascience.com/https-medium-com-piotr-skalski92-deep-dive-into-deep-networks-math-17660bc376ba)。与往常一样,可以在我的GitHub(https://github.com/SkalskiP/ILearnDeepLearning.py)上找到带有可视化和注释的完整源代码,让我们开始吧!

    介绍
    过去我们已经知道被称为紧密连接的神经网络。这些网络的神经元被分成若干组,形成连续的层。每一个这样的神经元都与相邻层的每一个神经元相连。下图显示了这种体系结构的一个示例。

    在这里插入图片描述
    图1. 密集连接的神经网络结构
    当我们根据一组有限的人工设计的特征来解决分类问题时,这种方法很有效。例如,我们根据足球运动员在比赛期间的统计数据来预测他的位置。然而,当处理照片时,情况变得更加复杂。当然,我们可以将每个像素的像素值作为单独的特征,并将其作为输入传递给我们的密集网络。不幸的是,为了让该网络适用于一张特定的智能手机照片,我们的网络必须包含数千万甚至数亿个神经元。另一方面,我们可以缩小我们的照片,但在这个过程中,我们会丢失一些有用的信息。我们立马意识到传统的策略对我们没有任何作用,我们需要一个新的有效的方法,以充分利用尽可能多的数据,但同时减少必要的计算和参数量。这就是CNNs发挥作用的时候了。

    数字图像的数据结构
    让我们先花一些时间来解释数字图像是如何存储的。你们大多数人可能知道它们实际上是由很多数字组成的矩阵。每一个这样的数字对应一个像素的亮度。在RGB模型中,彩色图像实际上是由三个对应于红、绿、蓝三种颜色通道的矩阵组成的。在黑白图像中,我们只需要一个矩阵。每个矩阵都存储0到255之间的值。这个范围是存储图像信息的效率(256之内的值正好可以用一个字节表达)和人眼的敏感度(我们区分有限数量的相同颜色灰度值)之间的折衷。
    在这里插入图片描述
    图2. 数字图像的数据结构

    卷积
    核卷积不仅用于神经网络,而且是许多其他计算机视觉算法的关键一环。在这个过程中,我们采用一个形状较小的矩阵(称为核或滤波器),我们输入图像,并根据滤波器的值变换图像。后续的特征map值根据下式来计算,其中输入图像用f表示,我们的kernel用h表示,结果矩阵的行和列的索引分别用m和n表示。

    在这里插入图片描述
    图3. 核卷积的例子
    将过滤器放置在选定的像素上之后,我们从kernel中提取每个相应位置的值,并将它们与图像中相应的值成对相乘。最后,我们总结了所有内容,并将结果放在输出特性图的对应位置。上面我们可以看到这样的操作在细节上是怎么实现的,但是更让人关注的是,我们通过在一个完整的图像上执行核卷积可以实现什么应用。图4显示了几种不同滤波器的卷积结果。
    在这里插入图片描述
    图4. 通过核卷积得到边缘[原图像:https://www.maxpixel.net/Idstein-Historic-Center-Truss-Facade-Germany-3748512]

    有效卷积和相同卷积
    如图3所示,当我们用3x3核对6x6的图像进行卷积时,我们得到了4x4特征图。这是因为只有16个不同的位置可以让我们把滤波器放在这个图片里。因为每次卷积操作,图像都会缩小,所以我们只能做有限次数的卷积,直到图像完全消失。更重要的是,如果我们观察卷积核如何在图像中移动,我们会发现位于图像边缘的像素的影响要比位于图像中心的像素小得多。这样我们就丢失了图片中包含的一些信息。通过下图,您可以知道像素的位置如何改变其对特征图的影响。
    在这里插入图片描述
    图5. 像素位置的影响
    为了解决这两个问题,我们可以用额外的边框填充图像。例如,如果我们使用1px填充,我们将照片的大小增加到8x8,那么与3x3滤波器卷积的输出将是6x6。在实践中,我们一般用0填充额外的填充区域。这取决于我们是否使用填充,我们要根据两种卷积来判断-有效卷积和相同卷积。这样命名并不是很合适,所以为了清晰起见:Valid表示我们仅使用原始图像,Same表示我们同时也考虑原图像的周围边框,这样输入和输出的图像大小是相同的。在第二种情况下,填充宽度应该满足以下方程,其中p为填充宽度和f是滤波器维度(一般为奇数)。

    步幅卷积
    在这里插入图片描述
    图6. 步幅卷积的例子
    在前面的例子中,我们总是将卷积核每次移动一个像素。但是,步幅也可以看作卷积层超参数之一。在图6中,我们可以看到,如果我们使用更大的步幅,卷积看起来是什么样的。在设计CNN架构时,如果希望感知区域的重叠更少,或者希望feature map的空间维度更小,我们可以决定增加步幅。输出矩阵的尺寸——考虑到填充宽度和步幅——可以使用以下公式计算。

    过渡到三维
    空间卷积是一个非常重要的概念,它不仅能让我们处理彩色图像,更重要的是在单层中应用多个卷积核。第一个重要的原则是,过滤器和要应用它的图像必须具有相同通道数。基本上,这种方式与图3中的示例非常相似,不过这次我们将三维空间中的值与卷积核对应相乘。如果我们想在同一幅图像上使用多个滤波器(提取不同的特征,如可以识别横线的滤波器、可以识别折线的滤波器……),我们分别对它们进行卷积,将结果一个叠在一起,并将它们组合成一个整体。接收张量的维数(即我们的三维矩阵)满足如下方程:n-图像大小,f-滤波器大小,nc-图像中通道数,p-是否使用填充,s-使用的步幅,nf-滤波器个数。

    在这里插入图片描述
    图7. 三维卷积

    卷积层
    现在是时候运用我们今天所学的知识来构建我们的CNN层了。我们的方法和我们在密集连接的神经网络中使用的方法几乎是一样的,唯一的不同是这次我们将使用卷积而不是简单的矩阵乘法。正向传播包括两个步骤。第一步是计算中间值Z,这是利用输入数据和上一层权重W张量(包括所有滤波器)获得的卷积的结果,然后加上偏置b。第二步是将非线性激活函数的应用到获得的中间值上(我们的激活函数表示为g)。对矩阵方程感兴趣的读者可以在下面找到对应的数学公式。如果您不清楚其中的操作细节,我强烈推荐我的前一篇文章,在那篇文章中,我详细讨论了紧密连接的神经网络的原理。顺便说一下,在下图中你可以看到一个简单的可视化,描述了方程中使用的张量的维数。

    在这里插入图片描述
    图8. 张量维度

    连接剪枝和参数共享
    在文章的开头,我提到密集连接的神经网络不擅长处理图像,这是因为需要学习大量的参数。既然我们已经理解了卷积是什么,让我们现在考虑一下它是如何优化计算的。在下面的图中,以稍微不同的方式显示了二维卷积,以数字1-9标记的神经元组成了输入层,并接受图像像素亮度值,而A - D单元表示计算出的特征map元素。最后,I-IV是需要经过学习的卷积核的值。
    在这里插入图片描述
    图9. 连接剪枝和参数共享
    现在,让我们关注卷积层的两个非常重要的属性。首先,你可以看到,并不是所有连续两层的神经元都相互连接。例如,神经元1只影响A的值。其次,我们看到一些神经元共享相同的权重。这两个性质都意味着我们需要学习的参数要少得多。顺便说一下,值得注意的是,滤波器中的一个值会影响特征map中的每个元素——这在反向传播过程中非常重要。

    卷积层反向传播
    任何尝试过从头编写自己的神经网络代码的人都知道,完成正向传播还没有完成整个算法流程的一半。真正的乐趣在于你想要进行反向传播得到时候。现在,我们不需要为反向传播这个问题所困扰,我们可以利用深度学习框架来实现这一部分,但是我觉得了解底层是有价值的。就像在密集连接的神经网络中,我们的目标是计算导数,然后用它们来更新我们的参数值,这个过程叫做梯度下降。
    在我们的计算中需要用到链式法则——我在前面的文章中提到过。我们想评估参数的变化对最终特征map的影响,以及之后对最终结果的影响。在我们开始讨论细节之前,让我们就对使用的数学符号进行统一——为了让过程更加简化,我将放弃偏导的完整符号,而使用如下所示的更简短的符号来表达。但记住,当我用这个符号时,我总是指的是损失函数的偏导数。

    在这里插入图片描述
    图10. 单卷积层的输入和输出的正向和反向传播
    我们的任务是计算dW[l]和db[l]——它们是与当前层参数相关的导数,以及dA[l -1]的值——它们将被传递到上一层。如图10所示,我们接收dA[l]作为输入。当然,张量dW和W、db和b以及dA和A的维数是相同的。第一步是通过对输入张量的激活函数求导得到中间值dZ[l]。根据链式法则,后面将使用这个操作得到的结果。

    现在,我们需要处理卷积本身的反向传播,为了实现这个目的,我们将使用一个矩阵运算,称为全卷积,如下图所示。注意,在这个过程中,对于我们使用卷积核,之前我们将其旋转了180度。这个操作可以用下面的公式来描述,其中滤波器用W表示,dZ[m,n]是一个标量,属于上一层偏导数。

    在这里插入图片描述
    图11. 全卷积

    池化层
    除了卷积层,CNNs还经常使用所谓的池化层。池化层主要用于减小张量的大小和加速计算。这种网络层很简单——我们需要将图像分割成不同的区域,然后对每个部分执行一些操作。例如,对于最大值池化层,我们从每个区域中选择一个最大值,并将其放在输出中相应的位置。在卷积层的情况下,我们有两个超参数——滤波器大小和步长。最后一个比较重要的一点是,如果要为多通道图像进行池化操作,则应该分别对每个通道进行池化。
    在这里插入图片描述
    图12. 最大值池化的例子

    池化层反向传播
    在本文中,我们将只讨论最大值池化的反向传播,但是我们将学习的规则只需要稍加调整就可以适用于所有类型的池化层。由于在这种类型的层中,我们没有任何必须更新的参数,所以我们的任务只是适当地分布梯度。正如我们所记得的,在最大值池化的正向传播中,我们从每个区域中选择最大值,并将它们传输到下一层。因此,很明显,在反向传播过程中,梯度不应该影响矩阵中没有包含在正向传播中的元素。实际上,这是通过创建一个掩码来实现的,该掩码可以记住第一阶段中使用的值的位置,稍后我们可以使用该掩码来传播梯度。
    在这里插入图片描述
    图13. 最大值池化的反向传播

    结论
    恭喜你能来这里。非常感谢您花时间阅读本文。如果你喜欢这个帖子,您可以考虑向你的朋友,或者两个或五个朋友分享。如果你注意到任何错误的思维方式,公式,动画或代码,请让我知道。
    本文是“神经网络之谜”系列文章的另一部分,如果您还没有机会阅读其他文章,请阅读其他文章(https://towardsdatascience.com/preventing-deep-neural-network-from-overfitting-953458db800a)。另外,如果你喜欢我所做的工作,在Twitter和Medium上关注我,也可以看看我正在做的其他项目,如GitHub(https://github.com/SkalskiP)和Kaggle(https://www.kaggle.com/skalskip)。保持好奇心!

    via https://towardsdatascience.com/gentle-dive-into-math-behind-convolutional-neural-networks-79a07dd44cf9

    展开全文
  • 图像去卷积

    千次阅读 2019-06-24 10:22:35
    物镜数值孔径受限的情况下,这项技术主要是依靠一系列模糊处理技术来提高图像的质量。 基本上所有通过数码荧光显微镜拍摄的图像都可以反卷积处理。还有一些新的技术将反卷积应用在透射光图像中。在所有反卷积技术...

    反卷积是一种计算密集型图像处理技术,通过该技术,可以提高显微图像的对比度和清晰度。物镜数值孔径受限的情况下,这项技术主要是依靠一系列去模糊处理技术来提高图像的质量。

    基本上所有通过数码荧光显微镜拍摄的图像都可以反卷积处理。还有一些新的技术将反卷积应用在透射光图像中。在所有反卷积技术的研究应用中,3D成像是最常用到反卷积处理的。图1标注了反卷积处理中需要用到的光学元件。样品是一个理想的细胞,由普通光学显微镜延Z轴获得一系列光切图(右图)重建形成。在每一个焦平面上,相对应的平面图像被探测器记录并保存在计算机中。在反卷积分析中,每一个焦平面上的图像被处理重建为一个3D图像。

                                                                      [转载]关于图像去卷积,转载一篇

     

    反卷积技术常被认为是共聚焦显微镜的很好的替代品。严格来说这种说法并不准确,因为利用针孔光阑获得的共聚焦图像也可以用反卷积技术分析。然而,文献中记载的大部分涉及反卷积技术的实验,都是应用于宽场荧光显微镜上的。当今反卷积算法处理的图像可以跟共聚焦拍摄的图像相媲美。事实上,共聚焦显微镜与宽场反卷积处理显微技术都可以去模糊,但工作原理是相反的。

    共聚焦显微镜是通过安装在物镜和检测器之间的针孔光阑,来阻止非焦平面上的模糊图像,而只有焦平面上的光可以通过。相反,宽视场显微镜允许探测器接收到的所有光通过,随后利用反卷积技术对获得的图像去模糊处理。共聚焦显微镜尤其适合观察厚的样品,比如胚胎或者组织;而宽视场反卷积显微镜很适合拍摄在非常低光水平的样品,比如荧光标记的活细胞和核酸。

     

    图像降质的原因

    图像降质可分为4个独立的原因:噪声,散射,眩光和模糊。图2分别展示了上述4种原因造成的图像效果。反卷积技术的主要任务就是去除非焦平面上的模糊。反卷积算法确实可以去除噪声,但只是整体上相对简单的去除。

                                                                       [转载]关于图像去卷积,转载一篇

     

    1. 噪声。噪声通常被描述为图像细节的拟随机紊乱(quasi-random disarrangement),最严重的形式就是白噪声(white noise)或者黑白相间噪声(salt-and-pepper noise),就是类似于电视中图像信号不好导致屏幕上的雪花点(图 2(a))。这种类型的噪声被定义为拟随机,是因为如果噪声的来源是已知的,那这种噪声的分布是可以预测的。在数码显微镜中,噪声的主要来源是信号自身(光子噪声)或者成像系统。噪声产生的两种原因已经了解,因此对噪声的分布统计也是可知的。

    信号产生的噪声呈泊松分布(Poisson distribution),而成像系统产生的噪声常常呈高斯分布(Gaussian distribution)。因为噪声产生的这两种原因已经了解的非常清楚,因此通过使用合适的图像过滤器可以很容易的去除,这在很多反卷积处理的软件中都可以做到,是一个可选的图像预处理过程。

    2. 散射。散射常指的是由于样品的异质折射率而引起的光的随机干扰。散射会引起图像细节真正的随机紊乱,如图2(b)。虽然样品中的散射并没有一个满意的预测方法,但是研究表明,散射的程度与样品的厚度和样品周围包埋材料的光学特性密切相关。散射随着样品的厚度和样品内部结构的散射率异样性而增加。

    3. 眩光。与散射类似,眩光也是由光的随机扰动引起的,但常常由光学元件(如镜头、滤光片等)引起而不是样品本身。当今的显微镜,通过对镜头和滤光片的抗反射涂层,镜头细化成像技术,光学用胶合剂和玻璃成分等的改进,眩光的程度已经降到最低。图2(c)就是一个典型的眩光图像。

    4. 模糊。模糊是光通过成像系统的光学镜片组件时的非随机扩散引起的(图2(d))。模糊产生的主要原因是光的衍射,仅仅由于模糊引起的图像分辨率受限,被称为衍射限制(diffraction-limited)。它代表了任何一个成像系统固有的局限,而且是评价一个光学系统的像素有限性的决定性因素。光学原理中阐述的非常复杂的模糊模型,在高速计算机的帮助下可以应用在光学显微镜的成像上。

    这就是反卷积的基本依据。因为模糊在反卷积中的基础重要性,它的理论模型在本文的其他段落有详细讨论。然而,需要强调的是,所有的成像系统产生模糊,跟样品或者机械电子元件引起的图像降质形式完全无关。这种光学模糊跟其他类型的图像降质无关,使得反卷积去模糊成为可能。

    光和物体的相互作用主要源于物理现象,如散射、眩光和模糊。但是,一个特定材料中的分子的组成和排列(无论是玻璃,水或者蛋白)都有特定的光学特性。反卷积的目的,就是区分散射、眩光和模糊发生的位置及产生这些现象的数学模型的可能性。因为散射在样品中发生位置不固定,所以被认为很难建模。相反,因为模糊是显微镜光学系统的作用,所以很容易建模。这样的模型使得去模糊成为可能,反卷积可以使用这个模型去模糊。

     

    点扩散因子(PSF

    模糊的模型上升到理论光学上是以3D点扩散因子的概念为基础的。这个概念是反卷积的重要基础,为了避免图像伪影,更需要深入了解这个概念。点扩散因子是建立在样品空间的小点光源的无限扩散基础上。因为显微成像系统在这一点上仅仅收集到部分发射光,而这种光不能完美的集中在3D图像的点上。取而代之的是,这一点显示较宽而呈三维扩散方式。因此,点扩散因子是用来形容一个理想点光源的3D衍射类型。

    以已有的成像模式为基础(宽视场,共聚焦,透射光),点扩散因子有不同的形状和结构。在宽视场荧光显微镜中,点扩散因子的形状类似于被一团宽的光环包围的椭圆形足球。为了在三维空间上描述点扩散因子,通常使用3轴坐标系统,其中x和y轴是样品焦平面的坐标轴,而z轴与显微镜光轴平行。在这种情况下,点扩散因子表现为一系列x-y轴同心的环,见图3。在宽视场的点扩散因子中心的x-y轴纵切图像中显示为一系列x-y轴同心的环,在经典的光学显微镜文献中被称为艾里斑(Airy disk)。

                                                                                   [转载]关于图像去卷积,转载一篇

     

    两个x-z投影的点扩散因子显示出不同的球面像差(图3)。光轴与图像垂直的轴平行。左图中的点扩散因子展示了最小的球差,而右图中的点扩散因子球差非常大。需要注意的是,右图中,轴不对称和沿光轴中间的节点增宽,会引起轴向分辨率的降低和信号的模糊。理论上说,点扩散因子的大小是无限的,远离焦平面的总光强度与焦平面的光强度是相同的。但是,光的强度降低很快,最终会变得跟噪声分不开。使用高数值孔径的油浸物镜(1.40),无像差的点扩散因子,在焦平面占用0.2 μm2,扩散超过90次,在焦平面上下扩散到1mm范围内。记录这些点扩散因子图片所用的样品是悬浮在甘油中(折射率=1.47)0.1mm直径的荧光点,镜油的折射率在图中标示出来了。

    点扩散因子如何影响成像是一个重要的考虑因素。图像形成的理论模型将点扩散因子作为图像的基本单元。换句话说,点扩散因子对于图像来说相当于砖头对于房子的作用。最好的图像就是点扩散因子的集合,增加放大倍数不会改变这个事实。在《光学原理》一书(Born and Wolf: Principles of Optics)中有阐述“通过增加目镜的倍数,并不会增加原始图中没有的细节,因为原始图像的每一个部分都是一个小的衍射图,而从目镜看到的实际图像是放大图像的集合”。

    举例来说,要考虑在盖玻片和载玻片之间微小的荧光点的数量。焦平面上的样品图像呈星点云状,当用高分辨率观察时,每一个点实际上就是一系列小的同心环(图4(a))。如果稍微偏离焦平面,很多更大的同心环就会在刚才的成像位置显示(图4(b))。在收集3D图像的时候,每一个荧光点的完整的点扩散因子被记录。点扩散因子描述了通过成像系统中光的每一个点的情况。

                                                                           [转载]关于图像去卷积,转载一篇

     

    模糊过程就是卷积的数学模仿。卷积运算时描述样品中每一个点的点扩散因子。来自每一个点的发射光是对点扩散因子的卷积运算,产生最后的图像。不幸的是这个卷积出来会使样品图像变成模糊区域。图像中每一个点的亮度与样品中每一个荧光点的卷积运算线性相关。因为点扩散因子是三维的,点扩散因子的模糊在三维图像中固有的。任何一个焦平面的图像包含了该平面的点模糊和其他平面的点。

    总的来说,图像的形成是由样品的点扩散因子的卷积计算获得的。反卷积与这个过程相反,试图从模糊图像中重建清晰图像。

     

    点扩散因子中的像差

    点扩散因子被定义为理论上利用衍射的数学模型,或者经验上获取荧光点的三维图像(见图3)。一个理论上的点扩散因子通常有轴向对称和径向对称。实际上,点扩散因子是在x-y轴上面或者下面的对称(轴向对称)和z轴对称(径向对称)。一个经验上的点扩散因子可以有完美的对称衍生出(见图3)。这种衍生,通常指的是像差(Aberration),由成像系统光学套件中任何一个部分的不规则或不对称引起,尤其是物镜,但是其他部分也能引起像差,比如,反射镜、分光器、滤光片、光阑、孔径等。

    光学组件的质量越好,经验点扩散因子越能接近理想的对称状态。共聚焦和反卷积显微镜技术中的点扩散因子都与理想值非常接近。

    很多有经验的专业显微镜使用者都了解,光学显微镜中最常见的像差是球面像差。球差表现为点扩散因子形状的轴向对称,尤其延z轴,同时大小增加,(图3)。结果是分辨率和信号强度严重降低。实际上,球差最常见的来源是由物镜前镜头浸入的基质的折射率和样品浸入的基质决定。如何减少无处不在的像差至关重要。虽然反卷积技术可以部分恢复失去的分辨率,但是,即使再多的图像处理过程也不能恢复丢失的信号。

    展开全文
  • 基于MATLab的盲去卷积复原算法

    千次阅读 2020-05-09 09:08:03
    前言        之前写过一篇维纳滤波在图像复原中的作用,讲述了图像退化模型以及维纳滤波的作用。...盲去卷积的方法有多种,本文主要介绍由fish提出的基于露西-理查德森(Richardson-Lu
  • 本ppt详细介绍了卷积神经网络的起源背景、算法原理、算法的执行过程、以及CNN的应用场景
  • CNN卷积神经网络原理详解(上)

    万次阅读 多人点赞 2019-10-18 23:59:17
    CNN卷积神经网络原理详解(上)前言卷积神经网络的生物背景我们要让计算机做什么?卷积网络第一层全连接层训练 前言 卷积网络(convolutional network),也叫作卷积神经网络(convolutional neural network,CNN),是...
  • CNN卷积原理

    千次阅读 2018-11-26 15:12:08
    https://blog.csdn.net/qq_31456593/article/details/76083091 https://blog.csdn.net/qq_31456593/article/details/76083091 ... 一、卷积神经网络 1、简介 卷积神经网络最主要的特点就是局部...
  • 卷积运算原理

    千次阅读 多人点赞 2019-12-26 22:08:56
    卷积运算 内容选自吴恩达老师的深度学习课程当中,在此记录。以边缘检测为例,介绍卷积是如何进行运算的。 一、边缘检测示例 首先是垂直边缘检测,对左边的一个6×6的灰度图像进行卷积运算,中间3×3的即为我们通常...
  • 卷积的实现原理

    万次阅读 2020-03-09 11:53:15
    卷积的实现原理   我前面的一篇文章中,卷积操作的计算量分析中,引用了矩阵相乘来概括卷积的计算量,这样做确实是有道理的,因为在卷积的实现中的确是通过矩阵相乘来加速卷积的计算。但是我在那篇文章只是简单的...
  • 谱图卷积原理

    2020-10-06 10:00:58
  • 被问到了1*1卷积核的问题,记录关于它的理解。 1×1卷积是指多个feature channels之间的线性叠加,只不过这个系数可以看成是1*1的卷积。 这种表示的好处是,完全可以回到模型中其他常见N×N的框架下,不用定义新的...
  • 详细介绍卷积神经网络的结构原理,并且根据一个详细的例子来说明CNN网络如何应用
  • matlab 采用lucy-richardson方法对图像进行反变换
  • 转载自: &...0、标准卷积 ...那么一般的操作就是用32个3×3的卷积核来分别同输入数据卷积,这样每个卷积核需要3×3×16个参数,得到的输出是只有一个通道的数据。之所以会得...
  • 卷积神经网络原理.pdf

    2019-06-11 20:53:32
    本文档言简意赅地介绍了卷积神经网络的原理,从最基础的反向传播梯度下降开始介绍,是学习搭建卷积神经网络非常不错的参考资料。
  • 详细解读了卷积神经网络是如何工作的,从CNN卷积层、激活层、池化层到全链接层,及多层CNN作用进行了通熟易懂的讲解
  • 卷积编码原理

    2013-09-24 16:38:46
    卷积编码原理说明,包括结构图和具体算法共识
  • 主要介绍了Tensorflow卷积实现原理+手写python代码实现卷积教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 卷积原理和实际代码详细讲解!

    千次阅读 2019-04-26 22:57:59
    文章目录反卷积原理首先来看卷积操作然后来看反卷积操作代码中的实现首先来看卷积的代码然后再来看反卷积结合代码看反卷积过程 反卷积原理 转载自该博文 反卷积(转置卷积、空洞卷积(微步卷积))近几年用得较多,...
  • 卷积神经网络综述

    千次阅读 2019-02-25 14:51:38
    下面来简单介绍和归纳总结一下国内外卷积神经网络的结构,分析一下卷积神经网络的基本原理,阐述一下卷积神经网络在图像识别中的相关应用及取得的最新研究成果。 卷积神经网络是人工神经网络与深度学习相结合,通过...
  • 去卷积:deconvlucy

    2020-09-09 16:57:24
    I = imread('board.tif'); I = imcrop(I,[2 50 255 255]); % [xmin ymin width height],这里的大小需要减1,因为x_max = xmin+width,ymin = ymin+height imshow(I) title('Original Image') PSF = fspecial('...
  • 卷积交织器原理及FPGA实现.pdf
  • 卷积神经网络是深度学习中的基础模型。南京大学吴建鑫教授的「卷积神经网络CNN」笔记,35页pdf初学者学习指南理解CNN数学原理
  • 图像卷积原理及运算方法

    万次阅读 多人点赞 2018-06-07 15:39:46
    用一个模板和另一个图片对比,进行卷积运算。目的是使目标与目标之间的差距变得更大。卷积在数字图像处理中最常见的应用为锐化和边缘提取。 如边缘提取,假如目标像素点和它周边的值(上下左右前后的临点,具体的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,795
精华内容 20,718
关键字:

去卷积原理