精华内容
下载资源
问答
  • 为深入了解此类型算法,对国内外现有的基于数学形态学的点云滤波法进行系统总结,详细分析了各种方法的特点、可解决的问题及存在的问题,并结合现有基于数学形态学滤波法的主要缺陷展望了此类型算法的发展方向。
  • 一维数学形态学滤波示例程序-mathematical_morphology_1d.rar 自己编写的一维数学形态学滤波示例程序
  • 数学形态学滤波是基于几何操作的形式 最基本的操作就2种:膨胀、腐蚀 其他操作都是基于这两种操作组合而来的 数学形态学滤波 - 膨胀 A⊕BA \oplus BA⊕B 表示集合A用结构元素B膨胀,定义为: A⊕B=⋃b∈B(A)bA \...

    概述

    • 数学形态学滤波是基于几何操作的形式
    • 最基本的操作就2种:膨胀、腐蚀
    • 其他操作都是基于这两种操作组合而来的

    数学形态学滤波 - 膨胀

    • ABA \oplus B 表示集合A用结构元素B膨胀,定义为:
      • AB=bB(A)bA \oplus B = \bigcup_{b\in{B}}(A)_b

    下面通过图示来说明

    • 第一个是原始图像A
    • 第二个是结构元素B,其中➕表示锚定点,也就是B的坐标零点,旁边有两个像素,分别在零点的右侧和下侧
    • (A)b(A)_b 表示用A中的每一个像素进行移动b操作,也就是右移和下移b单位像素(B的零点旁像素的指向)
    • 最终把所有像素合并到一起(包括原图),形成第三个图像

    数学形态学滤波 - 腐蚀

    • AΘBA \Theta B表示集合A用结构元素B腐蚀
    • 定义为:AΘB=bB(A)bA \Theta B = \bigcap_{b\in{B}}(A)_{-b}

    下面通过图示来说明

    • 第一个是原始图像A
    • 第二个是结构元素B,其中➕表示锚定点,也就是B的坐标零点,旁边有两个像素,分别在零点的右侧和下侧
    • (A)b(A)_{-b} 表示用A中的每一个像素移动-b的距离,-表示原来是右移和上移,现在变成左移和下移
    • 最终把所有三个图像求交集,得到中间黑色部分的结果

    实际中使用的操作 - 开闭运算

    • 膨胀和腐蚀并不互为逆运算,二者级联使用可生成新的形态学运算
    • 开运算:先腐蚀后膨胀: AB=(AΘB)BA \circ B = (A \Theta B) \oplus B
    • 闭运算:先膨胀后腐蚀: AB=(AB)ΘBA \bullet B = (A \oplus B) \Theta B
    • 先开后闭:可有效去除噪声,效果类似高斯去噪或中值滤波,又稍有不同,多次使用会使图像部分区域出现马赛克现象
    • 注意:腐蚀和膨胀不是互为逆运算的关系,腐蚀完后在膨胀可能就不是原图像了
      • 比如图像中的一个孤立像素,腐蚀后就没有了,那么就无法再进行膨胀了

    各种滤波操作的OpenCV实现

    • 高斯平滑滤波

      • C++版本
        void GaussianBlur( InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT );
        
      • Python版本
        dst = cv.GaussianBlur( src, ksize, sigmaX[, dst[, sigmaY[, borderType]]] )
        
    • 中值滤波

      • C++版本
        void medianBlur( InputArray src, OutputArray dst, int ksize );
        
      • Python版本
        dst = cv.medianBlur( src, ksize[, dst] )
        
    • 形态学滤波

      • C++版本
        void morphologyEx( InputArray src, OutputArray dst, int op, InputArray kernel,
            Point anchor=Point(-1,-1), int iterations=1,
            int borderType=BORDER_CONSTANT,
            const Scalar& borderValue=morphologyDefaultBorderValue() );
        
        • kernel : 形态学运算的结构元素。可使用getStructuringElement创建
        • op: MORPH_OPEN – 开运算; MORPH_CLOSE – 闭运算 等
      • Python版本
        dst = cv.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]] )
        

    总结

    • 滤波即卷积,由逐点乘积后累加得到
    • 平滑滤波包括平均滤波、高斯滤波、中值滤波等方法,其中高斯滤波最为常用
    • 数学形态学滤波基于腐蚀与膨胀两个基本操作
    展开全文
  • 探讨了如何利用数学形态学滤波算法来对红外图像中的背景噪声和干扰噪声进行滤除的方法,并通过应用实例对该方法的结果进行了验证。从实验的结果看来:通过选择合适结构元素并进行适当的“开”、“闭”运算,能有效...
  • 这一节的操作方式和我以前的不一样,以前并不是用这样平移然后取并集交集的方式,因此提出质疑。我用以前的方法做了一下老师PPT里面给的例子,发现腐蚀的结果是一样的,膨胀的结果不同。我做的结果如图(膨胀),...

    前言

    前段时间在看CSDN学院的计算机视觉的课程,课程链接:

    • https://edu.csdn.net/course/play/26281/327074?utm_source=blogtoedu

    看完之后自己也做了比较粗略的笔记,链接如下:

    • https://blog.csdn.net/sf9898/article/details/104215801
    • https://blog.csdn.net/sf9898/article/details/104270277

    由于以前上过数字图像处理的课程,因此在上这门课程上到数学形态学腐蚀膨胀那一块的时候有点疑惑,课程里面讲的膨胀的做法和我以前学的做法得出的答案是不一样的,因此查资料做整理得到这篇博客。

    正文

    抛出观点

    个人认为课程里面的膨胀操作不正确

    腐蚀&&膨胀

    膨胀和腐蚀字面意思很好理解,膨胀就相当于在原有的图外围加一圈,腐蚀则是减少一圈,而且现实中比如OpenCV调用相应的函数得到的效果图也确实反映了上述结论。
    在这里插入图片描述
    回归到它们的本质(毕竟有时候要做题),看看它们的实现过程。以前学的和下面视频里的差不多。以下PPT图片来源于网上视频截图,我认为这个课程讲的不错,中科院的,传送门:

    • https://www.bilibili.com/video/av43045572?p=29

    先说腐蚀,虽然步骤和CSDN计算机视觉课程讲的不一样但是我做出来的结果是一样的。

    在这里插入图片描述
    定义和意义不怎么理解问题不大,主要是算法步骤要会。比如下面这题,(a)是原始图像(二值图像),(b)是结构元素,也就是说(a)是上述的X,(b)是上述的S。(c)是最后的答案。

    在这里插入图片描述
    接下来按步骤走,用结构元素扫描每一个像素。做“与”操作——如果结构元素区域的图像的像素都为1,则这个origin或者说是图(b)中的+号所对应的像素就为1。比如下图,当结构元素移动到(或者说扫描到红色标记的区域)时,此时这三个方格内没有都是1(图中紫色区域为1),因此+号对应的像素点为0。
    在这里插入图片描述
    再比如下图,当移动到图中红色区域时,都为1,故+号处像素为1。依次类推,可以得出(c)图的结果。(黑色区域为最终结果)
    在这里插入图片描述
    可以试着做下PPT里面的题目。验证一下。

    在这里插入图片描述

    再说膨胀

    在这里插入图片描述
    移动或者说扫描的方式和上面一样(类似卷积),这回还是做与操作——但是这回是都为0,+号处才为0,也就是说只要有一个1的出现,那就为1。

    比如这个图,按照类似的方法做一下。和图像中的卷积运算不大一样的是腐蚀膨胀过程一般会考虑边界,卷积一般不考虑边界。(下图中的蓝色部分相当于之前的+号)

    在这里插入图片描述

    在这里插入图片描述
    可以发现,腐蚀会减少图中1的数量,膨胀则增加1的数量。那么在由黑白构成的二值图像中,膨胀会增加白色的范围,腐蚀则增加黑色的范围。因此,假设用以下这张图(font.png)进行实验,对于膨胀操作,可以想象,由于白色部分的增大,字体会变瘦;对于腐蚀操作,由于黑色部分的增大,字体会加粗。

    在这里插入图片描述

    Python3 + OpenCV 测试代码:

    import cv2
    
    img = cv2.imread("font.png")
    img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    cv2.imshow("img",img)
    
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
    eroded = cv2.erode(img,kernel)      #腐蚀
    dilated = cv2.dilate(img,kernel)    #膨胀
    
    cv2.imshow("dilated",dilated)
    cv2.imshow("eroded",eroded)
    
    
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    

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

    图片出处:

    • https://blog.csdn.net/Suqing_2018/article/details/79185512?ops_request_misc=%7B%22request%5Fid%22%3A%22158175698119195239820858%22%2C%22scm%22%3A%2220140713.130056874…%22%7D&request_id=158175698119195239820858&biz_id=0&utm_source=distribute.pc_search_result.none-task

    说明:

    图片出处的博主文章是转载的,其中代码已经缺失,结果和我的相反的原因应该是源程序是对于黑色像素进行处理的。如若文章有哪里写错了还望指出。

    展开全文
  • // ...//_kernel : 形态学滤波的核 //anchor: 锚点再滤波核的位置 //iterations: 迭代次数 static void morphOp( int op, InputArray _src, OutputArray _dst, InputArray _kernel, Poin...
    //
    //_kernel : 形态学滤波的核
    //anchor: 锚点再滤波核的位置
    //iterations: 迭代次数
    static void morphOp( int op, InputArray _src, OutputArray _dst,
                         InputArray _kernel,
                         Point anchor, int iterations,
                         int borderType, const Scalar& borderValue )
    {
        Mat src = _src.getMat(), kernel = _kernel.getMat();
        Size ksize = kernel.data ? kernel.size() : Size(3,3);
        anchor = normalizeAnchor(anchor, ksize);
    
        CV_Assert( anchor.inside(Rect(0, 0, ksize.width, ksize.height)) );
    
        _dst.create( src.size(), src.type() );
        Mat dst = _dst.getMat();
    
        if( iterations == 0 || kernel.rows*kernel.cols == 1 )
        {
            src.copyTo(dst);
            return;
        }
    
        if( !kernel.data )
        {
            kernel = getStructuringElement(MORPH_RECT, Size(1+iterations*2,1+iterations*2));
            anchor = Point(iterations, iterations);
            iterations = 1;
        }
        else if( iterations > 1 && countNonZero(kernel) == kernel.rows*kernel.cols )
        {
            anchor = Point(anchor.x*iterations, anchor.y*iterations);
            kernel = getStructuringElement(MORPH_RECT,
                                           Size(ksize.width + (iterations-1)*(ksize.width-1),
                                                ksize.height + (iterations-1)*(ksize.height-1)),
                                           anchor);
            iterations = 1;
        }
    
        int nStripes = 1;
    #if defined HAVE_TBB && defined HAVE_TEGRA_OPTIMIZATION    //这里是TBB指令集操作, 如果你的库没有使用tbb  则这句话不会执行
        if (src.data != dst.data && iterations == 1 &&  //NOTE: threads are not used for inplace processing
            (borderType & BORDER_ISOLATED) == 0 && //TODO: check border types
            src.rows >= 64 ) //NOTE: just heuristics
            nStripes = 4;
    #endif
    
        parallel_for(BlockedRange(0, nStripes),
                     MorphologyRunner(src, dst, nStripes, iterations, op, kernel, anchor, borderType, borderType, borderValue));
    
        //Ptr<FilterEngine> f = createMorphologyFilter(op, src.type(),
        //                                             kernel, anchor, borderType, borderType, borderValue );
    
        //f->apply( src, dst );
        //for( int i = 1; i < iterations; i++ )
        //    f->apply( dst, dst );
    }
    

      

    转载于:https://www.cnblogs.com/luoyinjie/p/9913884.html

    展开全文
  • 课程致力于创建人人都能听的懂的计算机视觉,通过生动、细腻的讲解配合实战演练,让学生真正懂、用会。 【超实用课程内容】 课程内容分为三篇,包括视觉系统构成,图像处理基础,特征提取与...

    立即学习:https://edu.csdn.net/course/play/26281/327074?utm_source=blogtoedu

    数学形态学滤波

    腐蚀和膨胀

    腐蚀将黑的变黑了

    膨胀将白的变白了

    开运算:先腐蚀后膨胀

    闭运算:先膨胀后腐蚀

    先开后闭,可有效去除噪声

    展开全文
  • 课程致力于创建人人都能听的懂的计算机视觉,通过生动、细腻的讲解配合实战演练,让学生真正懂、用会。课程内容分为三篇,包括视觉系统构成,图像处理基础,特征提取与描述,运动跟踪,位姿估计,三维重构等内容。...
  • 课程致力于创建人人都能听的懂的计算机视觉,通过生动、细腻的讲解配合实战演练,让学生真正懂、用会。课程内容分为三篇,包括视觉系统构成,图像处理基础,特征提取与描述,运动跟踪,位姿估计,三维重构等内容。...
  • 课程致力于创建人人都能听的懂的计算机视觉,通过生动、细腻的讲解配合实战演练,让学生真正懂、用会。课程内容分为三篇,包括视觉系统构成,图像处理基础,特征提取与描述,运动跟踪,位姿估计,三维重构等内容。...
  • 形态学滤波matlab程序

    2018-03-20 17:21:23
    自己写的matlab形态学滤波function函数,方便调用,且实用
  • 基于形态学滤波去噪matlab代码
  • 形态学滤波

    千次阅读 2019-11-14 20:38:20
    形态学指的是数学方面的形态学滤波,特别是对图像的滤波处理。它的本质和其他滤波器一样,都能够对图像进行去噪、增强等作用。它包括的运算很多,最基本的两个形态学操作是腐蚀和膨胀,其他的高级形态学操作都是基于...
  • MATLAB实现形态学滤波

    2018-04-17 12:58:49
    用MATLAB代码实现形态学滤波,包括形态学中各种运算方法。
  • 基于形态学滤波与二维最大熵阈值分割的钙化点检测算法,毛云峰,,针对数字乳腺X线图像中的钙化点检测问题,本文提出了一种结合数学形态学滤波和二维最大熵阈值分割的钙化点检测算法。该算法首先��
  • 针对现有基于数学形态学的滤波算法在处理包含大面积空白区域的点云数据时遇到的问题,提出了一种改进的渐进多尺度数学形态学滤波算法,通过改进形态开运算来处理空白区域。根据数学形态学滤波的基本原理,证明了改进...
  • 利用数学形态学编写的广义滤波器,输入,信号,结构元素长度,类型。
  • 针对传统数学形态学滤波方法对图像处理效果严重依赖于结构元素的形状和大小以及结构元素的选取完全依靠设计者经验的问题,应用遗传算法对形态学滤波器设计中的结构元素进行优化,获得基于优化结构元素的形态滤波器。...
  • 关于ECG信号的形态学滤波原理

    千次阅读 2019-08-01 14:02:38
    形态学滤波数学形态学中发展而来的一类 非线性滤波技术 , 广泛应用于信号处理、图像分 析等多个领域. 数学形态学建立在严格的数学理论 基础之上, 主要以积分几何、集合代数及拓扑论为 理论基础. 传统的时频域变换...
  • 提出了一种基于区域预测的LiDAR 点云数据形态学滤波算法,该算法由点云数据建立规则格网、去除粗差点,对实验区域进行分块,然后使用各个分块区域的高程标准差预测地形坡度参数s 从而进行渐进式形态学滤波,最终确定...
  • Task07 OpenCV框架实现形态学滤波一、前言二、形态学概述三、基本形态学操作3.1腐蚀3.2膨胀四、高级形态学操作4.1开闭运算4.2形态学梯度4.3黑帽顶帽五、基于OpenCV的C++代码实现 一、前言 图像形态学滤波是图像滤波...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,547
精华内容 1,018
关键字:

数学形态学滤波