击中击不中的变换

1.1 击中击不中的步骤

击中击不中变换是形态学形状检测的基本工具。

步骤为:

  1. 使用模板s1腐蚀原图像X
  2. 使用模板s2(s2为是s1的补)对Y(Y为X的补)进行腐蚀
  3. 对两个结果进行取交集

用击中结构去腐蚀原始图像得到击中结果X(这个过程可以理解为在原始图像中寻找和击中结构完全匹配的模块,匹配上了之后,保留匹配部分的中心元素,作为腐蚀结果的一个元素),然后用击不中结构去腐蚀原始图像的补集得到击不中结果Y(即在原始图像上找到击不中结构与原始图像没有交集的位置,这个位置的元素保留,作为腐蚀结果的一个元素),取X和Y的交集就是击中-击不中的结果。 通俗理解就是:用一个小的结构元素(击中结构)去射击原始图像,击中的元素保留;再用一个很大的结构元素(击不中,一般取一个环状结构)去射击原始图像,击不中原始图像的位置保留。满足击中元素能击中and击不中元素不能击中的位置的元素就是最终的形状结果。

1.2 击中击不中opencv实现

#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
int main() {
	Mat input_image = imread("lena.jpg", 2);

	imshow("Hit or Miss原图", input_image);
	Mat kernel1 = (Mat_<int>(3, 3) <<
		0, 1, 0,
		1, -1, 1,
		0, 1, 0);
	Mat kernel2 = (Mat_<int>(3, 3) <<
		0, 1, 0,
		1, 0, 1,
		0, 1, 0);
	Mat kernel3 = (Mat_<int>(3, 3) <<
		0, 0, 0,
		0, 1, 0,
		0, 0, 0);
	Mat output_image, output_image1,output_image2,output_image3,output_image4;
	Mat element = getStructuringElement(0, Size(3, 3), Point(-1, -1));
	erode(input_image, output_image3, element);
	imshow("腐蚀图", output_image3);
	morphologyEx(input_image, output_image1, MORPH_HITMISS, kernel3);
	morphologyEx(input_image, output_image2, MORPH_HITMISS, kernel2);
	morphologyEx(input_image, output_image, MORPH_HITMISS, kernel1);
	imshow("Hit or Miss0", output_image1);
	imshow("Hit or Miss1", output_image2);
	imshow("Hit or Miss", output_image);
	cv::absdiff(output_image1, output_image2, output_image4);
	cv::imshow("Hit or Miss2", output_image4);
	waitKey(0);
	return 0;
}

 

Mat s1 = (Mat_<int>(3, 3) <<

        0, 0, 0,

        0, 1, 0,

        0, 0, 0);

Mat s2 = (Mat_<int>(3, 3) <<

        0, 1, 0,

        1, 0, 1,

        0, 1, 0);

Mat s3 = (Mat_<int>(3, 3) <<

        0, 1, 0,

        1, -1, 1,

        0, 1, 0);

s3是直接用s2-s1所得

1.3 击中击不中效果

                        图1 原图                                              图2 使用s1腐蚀结果                                  图3 使用s2腐蚀结果

   图4   图3与图2的交集                              图5 直接使用s3腐蚀的结果

参考:https://blog.csdn.net/horseinch/article/details/50127955

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值