《数字图像处理》第九章 形态学图像处理 学习笔记附部分例子代码(C++ & opencv)

0. 前言

参考博客:
opencv图像处理模块(6)——击中击不中 - 知乎 (zhihu.com)

第三版教材中图片下载地址: book images downloads

vs2019配置opencv可以查看:VS2019 & Opencv4.5.4配置教程

前情回顾:
数字图像处理第三章 灰度变换和空间滤波 学习笔记
数字图像处理第四章 频率域滤波 学习笔记
数字图像处理第五章 图像复原和重建(内容较简单,就没有详细记录笔记)
数字图像处理第六章 彩色图像处理
数字图像处理第七章 小波与多分辨率处理(内容困难,仅进行了简单记录)
数字图像处理第八章 图像压缩(目前非重点)

后续剧情:
数字图像处理第十章 图像分割 学习笔记
数字图像处理第11章 表示和描述 学习笔记

1. 腐蚀和膨胀

1.1 腐蚀

A ⊖ B = { z ∣ ( B ) z ∩ A c = ∅ } A\ominus B = \{z | (B)_{z} \cap A^{c} = \varnothing \} AB={ z(B)zAc=}

B不与A的补集的交集为空

1.2 膨胀

A ⊕ B = { z ∣ ( B ^ ) z ∩ A ≠ ∅ } A\oplus B=\left\{z\mid({\hat{B}})_{z}\cap A\neq\varnothing\right\} AB={ z(B^)zA=}

A是被膨胀的集合, A和B至少有一个元素重合

1.3 对偶性

膨胀和腐蚀关于集合求补运算和反射运算是对偶的.

2. 开操作和闭操作

开操作: 平滑物体的轮廓, 断开较窄的狭颈并消除细的突出物.

闭操作: 弥合较窄的间断和细长的沟壑, 消除小的孔洞, 填补轮廓线中的断裂.

结构元B对集合A的开操作:

A ∘ B = ( A ⊖ B ) ⊕ B A\circ B=(A\ominus B)\oplus B AB=(AB)B

结构元B对集合A的闭操作:

A ∙ B = ( A ⊕ B ) ⊖ B A\bullet B=(A\oplus B)\ominus B AB=(AB)B

opencv有腐化函数erode()和膨胀函数dilate()

Mat openOperationRes(Mat input, int size) {
   
    Mat kernel = Mat::ones(Size(size, size), CV_8U);
    //先腐化再膨胀
    Mat eroded;
    erode(input, eroded, kernel);
    Mat opened;
    dilate(eroded, opened, kernel);
    return opened;
}

Mat closeOperationRes(Mat input, int size) {
   
    Mat kernel = Mat::ones(Size(size, size), CV_8U);
    //先膨胀再腐化
    Mat dilated;
    dilate(input, dilated, kernel);
    Mat closed;
    erode(dilated, closed, kernel);
    return closed;
}

void test05(string path) {
   
    Mat img = imread(path, IMREAD_GRAYSCALE);
    if (img.empty()) {
   
        cout << "Unable to load image\n";
        return;
    }
    Mat kernel = Mat::ones(Size(3, 3), CV_8U);
    //进行腐化操作
    Mat eroded;
    erode(img, eroded, kernel);
    Mat opened = openOperationRes(img, 3);
    Mat opened_closed = closeOperationRes(opened, 3);

    imshow("original", img);
    imshow("腐化后的结果", eroded);
    imshow("开操作结果", opened);
    imshow("开操作的闭操作结果", opened_closed);
    waitKey(0);
}

在这里插入图片描述

3. 击中或不击中变换

形态学上的击中或不击中是形状检测中的一个基本工具。

A ⊛ B = ( A ⊖ B 1 ) ∩ ( A c ⊖ B 2 ) A\circledast B =(A\ominus B_1)\cap (A^c\ominus B_2) AB=(AB1)(A

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值