精华内容
下载资源
问答
  • 形态学运算之基本概念

    万次阅读 2017-03-22 17:25:43
    形态学运算是针对二值图像依据数学形态学(Mathematical Morphology)的集合论方法发展起来的图像处理方法。 通常,形态学图像处理表现为一种邻域运算形式,一种特殊定义的领域称之为“结构元素”(Structure ...
    形态学运算是针对二值图像依据数学形态学(Mathematical Morphology)的集合论方法发展起来的图像处理方法。
    通常,形态学图像处理表现为一种邻域运算形式,一种特殊定义的领域称之为“结构元素”(Structure Element),在每个像素位置它与二值图像对应的区域进行特定的逻辑运算,逻辑运算的结果为输出图像的响应像素。

    简单来讲,形态学操作就是基于形状的一系列图像处理操作,通过将结构元素作用于输入图像来产生输出图像。

    最基本的形态学操作有:腐蚀与膨胀(Erosion和Dilation)。
    广泛应用于: 消除噪声、 分割(isolate)独立的图像元素以及连接(join)相邻的元素和 寻找图像中的明显的极大值区域或极小值区域。

    腐蚀(Erosion):

    即,模板和输入图像中对应位置的元素相与的结果全不为0时,结果才为0。
    删除对象边界的某些像素。
    用3x3的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图像做与运算,如果都为1,则结果图像中值为1,否则为0.
    结果:前景对象减小一圈。


    膨胀(Dilation):

    即,模板和输入图像对应位置的元素只要有一个与的结果不为0,则结果不为0.
    给图像中的对象边界添加元素。
    用3x3的结构元素,扫描二值图像中的每一个像素,用结构元素与其覆盖的二值图像做与运算,如果都为0,则结果图像中值为0,否则为1。
    结果:输入图像中的前景对象扩大一圈。

    膨胀: 把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔)
    腐蚀: 把二值图像各1像素连接成分的边界点去掉从而缩小一层(可提取骨干信息,去掉毛刺,去掉孤立的0像素)
    开运算: 先腐蚀再膨胀,可以去掉目标外的孤立点。
    闭运算: 先膨胀再腐蚀,可以去掉目标内的孔。

    为什么开运算可以去除目标外的孤立点?
    目标外的孤立点是和目标像素值一样的点,而非背景像素点,即为1而非0(0表示选取的空洞或背景像素值)。
    使用腐蚀,背景扩展,该孤立点被腐蚀掉,但是腐蚀会导致目标区域缩小一圈,因此需要再进行膨胀操作,将目标区域扩展回原来大小。
    所以,要使用开运算去除目标外的孤立点。

    为什么闭运算可以去除目标内的孔?
    目标内的孔,属于周围都是值为1,内部空洞值为0.目的是去除周围都是1的像素中间的0值。
    闭运算首先进行膨胀操作,目标区域扩张一圈,将目标区域的0去除,但是目标区域同时也会向外扩张一圈,因此需要使用腐蚀操作,使得图像中的目标区域恢复到之前的大小。


    其他概念:
    1. 包含

    2. 击中(hit in,记为X↑B)

    3. 不击中(miss)




    展开全文
  • 通俗易懂-形态学概念介绍

    千次阅读 2017-06-29 10:23:26
    形态学现在学完基本的几个了,但我还是不知道什么是形态学!原理其实就是和“卷积”在图像处理中的应用一样,就是一个“内核”遍历图像之后进行处理,内核的不同使得处理得到的图像效果也是不同的。下面介绍几种形态...

    形态学现在学完基本的几个了,但我还是不知道什么是形态学!原理其实就是和“卷积”在图像处理中的应用一样,就是一个“内核”遍历图像之后进行处理,内核的不同使得处理得到的图像效果也是不同的。下面介绍几种形态学滤波原理你就懂了:

    注->RGB:0-255,0代表黑色,255代表白色

    腐蚀:腐蚀的顾名思义就是一个东西变黑变坏变烂了,那么简单的理解就是把大于0的像素都都变得接近0就行了啊!

             那对应的图像处理:

     

    膨胀:一个人膨胀了的样子怎样的?变得越来越耀眼、越来越明亮!那么对应的像素就是像素<255的就越来越接近255啊。

            那对应的图像处理:

    开运算:从名字记忆是图像打开,既然是打开那就是最后的结果是膨胀-------------------->先腐蚀后膨胀

    闭运算:和开运算相对,从名字记忆是图像关闭,既然是打开那就是最后的结果是腐蚀----->先膨胀后腐蚀

    形态学梯度:梯度就是一个阶梯的长度,对应于图像那就是像素的差值,膨胀—原图、原图—腐蚀、膨胀—腐蚀、X/Y等方向的

    顶帽:不解释了---->原图—开运算

    黑帽:------------>原图—闭运算

     

    ---实例分析---

    注意点:形态学滤波一般运用在二值化的图像上对于那些彩色的图像运用不明显(用过之后很难看),看了很多书本的介绍都是随便找个例子,这是在课程中看到的,感觉按照下面的步骤学习形态学真的很简单而且实用!

    例一:腐蚀的作用 

    原图如下,去除图片上的小白点。

    用内核大小3X3进行的图片:小的白点已经没有了,但是稍微大点的杂点还是没去除!

     这是实用15X15的内核进行的图片:图片的白点完全去除了。

    这是不是完成了我们的要求了呢?仔细的看会发现,我们想要的大白色区域变小了,这是什么原因呢?

    从我们上面的原理分析可以得知:腐蚀会把目标区域给变小的,请看下面的图片->>>红色区域是内核,

    一号区域->黑色

    二号区域->白色

    三号区域->黑色

    二号区域->黑色

    五号区域->黑色

    所以图片缩小的区域就是内核的大小,每个边都会缩小!

     在想一下,如果我们用膨胀处理经过腐蚀的图片会怎么样?由上面的分析可以很快得到结论,就是恢复我们目标区域的原始尺寸

        看下面的效果图:

     

     代码比较简单,就是几行API,但是如何运用,为什么这么运用,这才是关键:

    复制代码
     1 int main(int argc,char**argv)
     2 {
     3     Mat input_image = imread("1.jpg");
     4     if (input_image.data==NULL) {
     5         return -1; cout << "can't open image.../";
     6     }
     7     imshow("Sourse image", input_image);
     8     Mat output_image;
     9     Mat kernel = getStructuringElement(MORPH_RECT,Size(15,15));
    10     erode(input_image,output_image,kernel);
    11     dilate(output_image, output_image,kernel);
    12     imshow("Destinate image",output_image);
    13     waitKey(0);
    14     return 0;
    15 }
    复制代码

    例二:提取行和列

        要求提取其中的行线段-->>

     经过处理的线段图片:

     

    这里没给其他的特殊照片,看代码直接改一下就可以了。

    注意点: getStructuringElement()获得内核的一些参数->核大小、核形状、核锚点等。其中控制核的大小可以滤波不同的噪点:

    我要滤去下面的三个大噪点,保留上面的大白色区域,其实滤波的核定义成红色的大小就可以了,不一定是正方形,矩形就可以了。

    复制代码
    int main(int argc,char*=*argv)
     2 {
     3     Mat input_image = imread("1.jpg");
     4     if (input_image.data==NULL) {
     5         return -1; cout << "can't open image.../";
     6     }
     7     imshow("Sourse image", input_image);
     8     Mat output_image;
     9     Mat kernel = getStructuringElement(MORPH_RECT,Size(input_image.cols/30,1));//这个input_image.cols/30,是定义核的长度是图片长度的三十分之一,如果直                                                           接给定一个数200也可以,但是你不知道200在图像上是多大啊。
    10     erode(input_image,output_image,kernel);
    11     dilate(output_image, output_image,kernel);
    12     imshow("Destinate image",output_image);
    13     waitKey(0);
    14     return 0;
    15 }
    复制代码

     例三:简单的提取字母

           目的是提取图片中的字母

     灰度化:

     阈值化:

     形态学滤波:

    取反之后:

    按 Ctrl+C 复制代码
    按 Ctrl+C 复制代码

     例四:稍微困难的提取字母

                    这个图像对我来说有点麻烦的,形态学滤波不行的,而且形态学操作之后留下很多噪点。。。。。

     

    形态学操作之后:

     

    轮廓检测去除噪点:

    霍夫变换去除粗实线:

    这个图的小噪点用上面的步骤可以去除,这个就没再继续了

    上代码:

    复制代码
     1 Mat input_image = imread("2.jpg");
     2     if (input_image.data==NULL) {
     3         return -1; cout << "can't open image.../";
     4     }
     5     imshow("Sourse image", input_image);
     6     cvtColor(input_image,input_image,CV_RGB2GRAY);
     7     //adaptiveThreshold(input_image,input_image,255,ADAPTIVE_THRESH_GAUSSIAN_C,THRESH_BINARY_INV,171,0);
     8     threshold(input_image,input_image,0,255,THRESH_BINARY|THRESH_OTSU);
     9     //-----------------------去除细实线------------------------//
    10     Mat output_image;
    11     Mat kernel1 = getStructuringElement(MORPH_RECT,Size(3,3));
    12     morphologyEx(input_image, input_image, MORPH_CLOSE, kernel1);
    13     bitwise_not(input_image, input_image);
    14     output_image = input_image.clone();
    15     imshow("DeleteThick image", input_image);
    16     //----------------------去除形态学不能去除的噪点----------------------//
    17     vector<vector<Point> > contours;
    18     vector<Vec4i> hierarchy;
    19     findContours(output_image, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
    20     Mat contours_image = Mat::zeros(input_image.size(), input_image.type());
    21     for (size_t i = 0; i < contours.size(); i++)
    22     {
    23         double Area = contourArea(contours[i]);
    24         if (Area > 50) continue;
    25         drawContours(contours_image, contours, static_cast<int>(i),Scalar(255,255,255),1);
    26     }
    27     input_image = input_image - contours_image;
    28     morphologyEx(input_image, input_image, MORPH_OPEN, kernel1);
    29     imshow("contours image", input_image);
    30     //------------------去除粗实线--------------------//
    31     vector<Vec4i> lines;
    32     HoughLinesP(input_image,lines,1,CV_PI/180,100,0,200); 
    33     Mat line_image = Mat::zeros(input_image.size(), input_image.type());
    34     for (size_t i = 0; i < lines.size(); i++)
    35     {
    36         line(line_image, Point(lines[i][0], lines[i][1]),
    37             Point(lines[i][2], lines[i][3]), Scalar(255, 255, 255), 1, 8);
    38     }
    39     bitwise_not(input_image, input_image);
    40     input_image = line_image + input_image;
    41     morphologyEx(input_image, input_image, MORPH_CLOSE, kernel1);
    42     imshow("Last image", input_image);
    复制代码

     

    展开全文
  • 数学形态学基本操作及其应用

    千次阅读 2014-12-21 01:17:24
    数学形态学实际上可以理解为一种滤波行为,所以很多地方称它为形态学滤波。有了个这概念,我们就能更好的理解它。我们滤波中用的滤波器(kernel)在这里被称为结构元素,结构元素往往是由一个特殊的形状构成,如:...

    数学形态学实际上可以理解为一种滤波行为,所以很多地方称它为形态学滤波。有了个这概念,我们就能更好的理解它。我们滤波中用的滤波器(kernel)在这里被称为结构元素,结构元素往往是由一个特殊的形状构成,如:线条、矩形、圆、菱形等。我们把结构元素的中心(Anchor Point)与图像上像素点对齐,然后结构元素覆盖的领域像素就是我们要分析的像素,我们定义一种操作就形成了一种形态学运算。

    我们在这里不解释形态学操作的算法原理及它们的意义,有兴趣的可以参见相关数字图像处理方面的教材,或关注本博客,博主打算在OpenCV系列写完后,开始写图像处理方面算法系列的文章。

    一、形态学的基本操作

    腐蚀运算:erode

    void erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), 
               int iterations=1, int borderType=BORDER_CONSTANT, 
               const Scalar& borderValue=morphologyDefaultBorderValue());

    src:输入图像,很多场合下我们使用的是二值图像,当然灰度图像也可以。

    dst:输出图像,格式和输入图像一致。

    kernel:定义的结构元素。

    anchor:结构元素的中心,如果是默认参数(-1,-1),程序会自动将其设置为结构元素的中心。

    iterations:迭代次数,我们可以选择对图像进行多次形态学运算。

    后面两个参数是边界类型,由于要处理领域问题,所以图像需要扩充边界。一般情况下使用默认即可。

    膨胀运算:dilate

    膨胀跟腐蚀的参数完全一致,就不过多的说明了。这两个形态学操作是最基本的两个操作。

    int main()
    {
        Mat image=imread("../cat.png");
        // 彩色转灰度
        cvtColor(image,image,CV_BGR2GRAY);
        // 阈值化
        threshold(image,image,255*(0.5),255,THRESH_BINARY);
        
        // 形态学操作
        // 如果把结构元素设置为Mat(),则将用默认的3*3的矩形结构元素
        Mat eroded;
        erode(image,eroded,Mat());
        Mat dilated;
        dilate(image,dilated,Mat());
    
        return 0;
    }

    image

    下面要介绍的两个形态学操作,在实际应用中要比上面两个更加广泛,但实际上它们是上面两种操作的一个组合式的操作。

    开运算与闭运算

    这两个运算都是使用函数morphologyEx来实现的,这个函数的接口如下:

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

    函数的大部分参数都与上面介绍的erode函数参数是一样的,这里面的op是我们要进行的形态学的类型:

    MORPH_OPEN:对图像进行开运算。

    MORPH_CLOSE:对图像进行闭运算。

    下面我们还是以小猫图像为例显示一下对二值图像进行开运算和闭运算后得到的结果。

    int main()
    {
        Mat image=imread("../cat.png");
        // 彩色转灰度
        cvtColor(image,image,CV_BGR2GRAY);
        // 阈值化
        threshold(image,image,255*(0.5),255,THRESH_BINARY);
    
        // 定义结构元素
        Mat se(5,5,CV_8U,Scalar(1));
        Mat closed;
        morphologyEx(image,closed,MORPH_CLOSE,se);
        Mat opened;
        morphologyEx(image,opened,MORPH_OPEN,se);
    
        return 0;
    }

    image

    从图片中我们可以得出结论:

    闭运算可以填充图像中的孔洞,连接一些缺口;开运算可以去除图像中一些较小的结构。前提是这些孔洞或碎片要与进行运算的结构元素尺度相当。

    二、用形态学操作来检测边缘和角点

    其实用形态学来检测边缘的原理非常简单,我们打开源码看它是怎么操作的:

    case CV_MOP_GRADIENT:
            erode( src, temp, kernel, anchor, iterations, borderType, borderValue );
            dilate( src, dst, kernel, anchor, iterations, borderType, borderValue );
            dst -= temp;
            break;

    可以看出来,它是对图像先做了一个腐蚀,再做了一次膨胀,然后将两次的结果相减即可。

    int main()
    {
        Mat image=imread("../cat.png");
        // 彩色转灰度
        cvtColor(image,image,CV_BGR2GRAY);
        Mat catEdge;
        morphologyEx(image,catEdge,MORPH_GRADIENT,Mat());
    
        // 阈值化
        threshold(catEdge,catEdge,40,255,THRESH_BINARY);
        namedWindow("catEdge");imshow("catEdge",catEdge);
    
        waitKey();
        return 0;
    }

    image

    下面我们来实现用形态学操作来检测角点。

    首先我们需要定义几个特殊的结构元素,我们这里都用Mat来定义,并像素式的赋值,你可以选择OpenCV里的getStructElement来更快的实现。

    // 定义结构元素
        Mat cross(5,5,CV_8U,Scalar(0));
        Mat diamond(5,5,CV_8U,Scalar(1));
        Mat square(5,5,CV_8U,Scalar(1));
        Mat x(5,5,CV_8U,Scalar(0));
        
        for(int i=0;i<5;i++)
        {
            cross.at<uchar>(2,i)=1;
            cross.at<uchar>(i,2)=1;
    
        }
        diamond.at<uchar>(0,0)=0;
        diamond.at<uchar>(0,1)=0;
        diamond.at<uchar>(1,0)=0;
        diamond.at<uchar>(4,4)=0;
        diamond.at<uchar>(3,4)=0;
        diamond.at<uchar>(4,3)=0;
        diamond.at<uchar>(4,0)=0;
        diamond.at<uchar>(4,1)=0;
        diamond.at<uchar>(3,0)=0;
        diamond.at<uchar>(0,4)=0;
        diamond.at<uchar>(0,3)=0;
        diamond.at<uchar>(1,4)=0;
    
        for(int i=0;i<5;i++){
            x.at<uchar>(i,i)=1;
            x.at<uchar>(4-i,i)=1;
        }

    第一个为一个十字型的结构元素,第二个为菱形,第三个是矩形,第四个是一个“X”

    型。

    然后我们按下面的顺序对一幅图像进行操作,并对最后的结果进行阈值化。

    Mat result;
    dilate(image,result,cross);
    erode(result,result,diamond);
    
    Mat result2;
    dilate(image,result2,x);
    erode(result2,result2,square);
    absdiff(result2,result,result);
    
    threshold(result,result,40,255,THRESH_BINARY);

    经过上面步骤,我们得到了一张二值图像,显示了图像的一些角点的位置。

    image

    为了更形象的说明,我们将上面的这些点在原彩色图像上标出来:

    // 标记角点
    void drawOnImage(const Mat& binary,Mat& image)
    {
        for(int i=0;i<binary.rows;i++)
        {
            // 获取行指针
            const uchar* data=binary.ptr<uchar>(i);
            for(int j=0;j<binary.cols;j++)
            {
                if(data[j]) //角点图像上的白点
                    circle(image,Point(j,i),8,Scalar(0,255,0));// 画圈
            }
        }
    }

    image

    三、用数学形态学进行车牌定位

    智能交通中车牌的检测与识别一直是核心问题,而车牌识别发展了20余年,已经存在了很多的解决方案,我们这里采用数学形态学来进行车牌检测。本部分并不是一个完整的车牌定位程序,后面还需要进行连通区域的标记和筛选以及伪车牌去除等,有兴趣的读者可以继续现实或和我交流。

    第一步:应用形态学做竖直方向的边缘检测。

    文章第二部分中已经介绍了用形态学做边缘检测,我们这里只需要修改结构元素就可以实现只检测竖直方向上的边缘。

    image

    第二步:定义水平方向的闭运算和竖直方向的闭运算,将竖直的线条连成一块。

    image

    第三步:遍历连通区域,按照车牌的一些限制条件进行筛选即可。

    int main()
    {
        Mat cimage=imread("../car.png");
        Mat image;
        cvtColor(cimage,image,CV_BGR2GRAY);
         
        Mat result;
        //检测竖直边缘
        morphologyEx(image,result,MORPH_GRADIENT,Mat(1,2,CV_8U,Scalar(1)));
        //阈值化
        threshold(result,result,255*(0.2),255,THRESH_BINARY);
        //水平方向闭运算
        morphologyEx(result,result,MORPH_CLOSE,Mat(1,20,CV_8U,Scalar(1)));
        //竖起方向闭运算
        morphologyEx(result,result,MORPH_CLOSE,Mat(10,1,CV_8U,Scalar(1)));
    
        return 0;
    }

    注:上面的例程只是简单的用来介绍数学形态学的用法,想应用在实际工程中,还需要进行一步改进。

    作者:☆Ronny丶

    出处:http://www.cnblogs.com/ronny/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    展开全文
  • 数学形态学

    数学形态学(Mathematical Morphology)——二值形态学

    一、基本概念

    结构元素(Structure Element):

    设有两幅图象B,A。若A是被处理的对象,而B是用来处理A的,则称B为结构元素,又被形象地称做刷子。结构元素通常都是一些比较小的图象。

    腐蚀(Erosion):

    X用S腐蚀的结果是所有使S平移x后仍在X中的x的集合。换句话说,用S来腐蚀X得到的集合是S完全包括在X中时S的原点位置的集合,用公式表示为:


    膨胀(Dilation):

    膨胀可以看做是腐蚀的对偶运算,其定义是:把结构元素B平移a后得到Ba,若Ba击中X,我们记下这个a点。所有满足上述条件的a点组成的集合称做X被B膨胀的结果。


    开运算(Opening Operation):

    先腐蚀后膨胀称为开运算,即:


    闭运算(Closing Operation):

    先膨胀后腐蚀称为闭运算,即:


    二、基本原理

    腐蚀

    如下图所示,X表示原始图像,B表示结构元素,B对X 腐蚀的示意图如下:


    对于任意一个在阴影部分的点a,Ba 包含于X,所以X被B腐蚀的结果就是那个阴影部分。阴影部分在X的范围之内,且比X小,就象X被剥掉了一层似的,这就是为什么叫腐蚀的原因。腐蚀在数学形态学运算中的作用是消除物体边界点。

    B对X 腐蚀的效果图如下图所示:


    膨胀

    如下图所示,X表示原始图像,B表示结构元素,B对X 膨胀的示意图如下:


    图中X是被处理的对象,B是结构元素,对于任意一个在阴影部分的点a,Ba击中X,所以X被B膨胀的结果就是那个阴影部分。阴影部分包括X的所有范围,就象X膨胀了一圈似的,这就是为什么叫膨胀的原因。

    B对X膨胀的效果图下图所示:



    开运算

    开运算的效果图如下图所示:


    我们可以得到关于开运算的几点结论:
    (1)开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。
    (2)开运算是一个基于几何运算的滤波器。
    (3)结构元素大小的不同将导致滤波效果的不同。
    (4)不同的结构元素的选择导致了不同的分割,即提取出不同的特征。

    闭运算

    闭运算的效果图如下图所示:


    我们也可以得到关于闭运算的几点结论:
    (1)闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。
    (2)闭运算是通过填充图像的凹角来滤波图像的。
    (3)结构元素大小的不同将导致滤波效果的不同。
    (4)不同结构元素的选择导致了不同的分割。

    MATLAB程序:

    结构元素:

    %strel函数的功能是运用各种形状和大小构造结构元素

    se1=strel('disk',5);%这里是创建一个半径为5的平坦型圆盘结构元素

    腐蚀:

    A2=imerode(A1,se1);

    膨胀:

    B=[0 1 0
    1 1 1
    0 1 0];
    A2=imdilate(A1,B);%图像A1被结构元素B膨胀

    开运算:

    se=strel('square',5');%方型结构元素

    fo=imopen(f,se);%直接开运算

    闭运算:

    fc=imclose(f,se);%直接闭运算


    下面是算法实现的程序代码: 
    I1=imread('tire.tif'); %读灰度图tire.tif 
    I2=imnoise(I1,'salt & pepper'); %在图像上加入椒盐噪声 
    figure,imshow(I2) %显示加椒盐噪声后的灰度图像 
    I3=im2bw(I2); %把加椒盐噪声后的灰度图像二值化 
    figure,imshow(I3) %显示二值化后的图像 
    I4=bwmorph(I3,'open'); %对二值噪声图像进行二值形态学开运算 
    figure,imshow(I4) %显示开运算后的图像 
    I5=bwmorph(I4,'close'); %对上述图像进行形态学闭运算 
    figure,imshow(I5) %显示最终处理后的图像





    展开全文
  • 图像形态学操作的基本原理简介

    千次阅读 2009-08-05 23:15:00
    ⑴ 图像形态学处理的概念数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等...
  • 介绍了数学形态学基本概念及应用领域。详细地阐述了数学形态学基本原理、基本性质和基于数学 形态学边缘检测和图像分割的方法及要点。最后给出了基于边缘轮廓结构的形态学开、闭变换在提取噪声区域及滤掉噪声 ...
  • 上篇文章中,我们重点了解了腐蚀和膨胀这两种最基本形态学操作,而运用这两个基本操作,我们可以实现更高级的形态学变换。 所以,本文的主角是OpenCV中的morphologyEx函数,它利用基本的膨胀和腐蚀技术,来执行...
  • 1.引言  形态学一般指生物学中研究动物和植物结构的分支。数学形态学(也称图像代数)...数学形态学的应用可以简化图像数据,保持他们基本的形状特征,并出去不相干的结构。数学形态学的算法有天然的并行实现的结构。
  • 下面一起来了解数学形态学概念。 数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、...
  • OpenCV 形态学处理

    2020-12-22 14:06:26
    形态学主要处理二值图像(0黑1白)。 图像腐蚀 概念 原理 函数 erode kernel = np.ones((5,5),np.uint8) #numpy库生成1数组,数据类型为整形 img2 = cv2.erode(img,kernel,iterations) #迭代次数,默认为1 处理...
  • OpenCV与EmguCV中的形态学滤波

    千次阅读 2016-06-28 14:41:32
    数学形态学是由一组形态学的代数运算子组成的,它的基本运算有4个: 膨胀、腐蚀、开启和闭合, 它们在二值图像和灰度图像中各有特点。简单来讲,形态学操作就是基于形状的一系列图像处理操作。OpenCV为进行图像的...
  • 图像处理基本算法-形态学

    万次阅读 2012-01-05 12:24:56
    形态学一般是使用二值图像,进行边界提取,骨架提取,孔洞填充,角点提取,图像重建。 基本的算法:膨胀腐蚀,开操作,闭操作,击中击不中变换 几种算法进行组合,就可以实现一些非常复杂的功能,而且逻辑严密。 ...
  • 数学形态学实际上可以理解为一种滤波行为,所以很多地方称它为形态学滤波。有了个这概念,我们就能更好的理解它。我们滤波中用的滤波器(kernl)在这里被称为结构元素,结构元素往往是由一个特殊的形状构成,如:...
  • 图像形态学运算--腐蚀与膨胀

    千次阅读 2016-12-10 19:52:54
    图像形态学运算基本概念与腐蚀膨胀操作
  • 形态学图像处理

    千次阅读 2018-07-13 21:05:55
    原文链接:https://blog.csdn.net/whuhan2013/article/details/53956606形态学,即数学形态学(mathematical Morphology),是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的...
  • OpenCV形态学操作

    千次阅读 2016-03-29 08:48:35
    OpenCV形态学操作 分类: OpenCV2010-07-30 10:23 4548人阅读 评论(4) 收藏 举报 ...⑴ 图像形态学处理的概念 数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的
  • 数字图像处理 - 形态学腐蚀

    千次阅读 2017-10-26 16:16:38
    一、理论与概念讲解——从现象到本质 1.1 形态学概述 ...下面一起来了解数学形态学概念。 数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学
  • 基于形态学的遥感影像分类后处理,巩现勇,,本文提出了基于形态学的遥感影像分类后优化处理方法,陈述了数学形态学基本概念和算法,通过VC++编程实现,应用形态学变换达到�
  • 形态学图像处理:膨胀与腐蚀

    千次阅读 2018-11-17 17:27:24
    下面一起来了解数学形态学概念。 数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、...
  • 图像处理——形态学

    千次阅读 2017-06-05 15:53:00
    形态学一般是使用二值图像,进行边界提取,骨架提取,孔洞填充,角点提取,图像重建。 基本的算法:膨胀腐蚀,开操作,闭操作,击中击不中变换 几种算法进行组合,就可以实现一些非常复杂的功能,而且逻辑严密...
  • 图像形态学

    千次阅读 2013-07-01 10:03:55
    图像形态学  数学形态学是基于集合论的非线性理论,是图像处理领域的一种新理论和新方法。数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、...
  • 图像形态学处理

    千次阅读 2019-07-12 11:02:17
    本章的练习主要是形态学的一些基本概念和技术,这些构成了一组提取图像特征的有力工具,针对二值图像和灰度图像的腐蚀、膨胀和重构的基本操作可以组合使用,以执行非常宽泛的任务。其练习代码和结果如下:...
  • 图像的形态学处理总结

    千次阅读 2014-02-20 19:36:15
    ⑴ 图像形态学处理的概念 数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和
  • opencv形态学处理morphologyEx函数

    千次阅读 2018-12-20 20:53:01
    本文的主角是OpenCV中的morphologyEx函数,它利用基本的膨胀和腐蚀技术,来执行更加高级的形态学变换,如开闭运算、形态学梯度、“顶帽”、“黑帽”等等。   第二件事,是浅墨想跟大家做一个关于OpenCV系列文章的...
  • 形态学——膨胀

    千次阅读 2018-08-03 17:40:18
    1、基本概念 膨胀是将与目标区域的背景点合并到该目标物中,使目标物边界向外部扩张的处理。 例如: 2、设计思想 设计一个结构元素,结构元素的原点定位在背景像素上,判断是否覆盖有目标点,来确定是否该点被...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,667
精华内容 14,666
关键字:

形态学最基本的概念是