形态学操作——击中击不中变换

操作目的

HitMiss变换是形态检测的一个工具,通过定义形状模板可以在图像中获取同一形状物体的位置坐标。

算法讲解

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

举例说明

讲解
公式进一步推广:
2

实现代码

*--------------------------【练习形态学操作】-------------------------------------*/
//===========================HitMiss变换========================
//输入:待处理图像的灰度图
//参数:变换模板D和W
//输出:模板位置的坐标图
void My_HitMissChange(Mat& srcImage, Mat& dstImage, Mat& D,Mat &W_SUB_D)
{Mat binaryMat, binaryMat_inv;Mat pic1, pic2;//第一步(将原图二值化并获取补图像)byte thre = My.My_Ostu(&srcImage);threshold(srcImage,binaryMat,thre, 255, 0);		//原图二值图threshold(srcImage, binaryMat_inv, thre, 255, 1);//二值图的补//用D对A腐蚀morphologyEx(binaryMat,pic1,MORPH_ERODE,D);//用(W-D)对A(补)腐蚀morphologyEx(binaryMat_inv, pic2, MORPH_ERODE, W_SUB_D);//取pic1与pic2的交集dstImage = pic1 & pic2;
}

根据需要自己定制矩阵D核矩阵W-D。
知识拓展:
1

opencv库函数调用方法:

morphologyEx(input_image, output_image, MORPH_HITMISS, kernel);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stack.pop()方法_C.示例中的Stack.Pop()方法

stack.pop()方法C#Stack.Pop()方法 (C# Stack.Pop() method) Stack.Pop() method is used to remove an object from the top of the stack. The method removes and returns the object from the top. Stack.Pop()方法用于从堆栈顶部删除对象。 该方法从顶部删除并…

java list的作用_集合框架(List集合的特有功能概述和测试)

package cn.itcast_03;import java.util.ArrayList;import java.util.List;/** List集合的特有功能:* A:添加功能* void add(int index,Object element):在指定位置添加元素* B:获取功能* Object get(int index):获取指定位置的元素* C:列表迭代器* ListIterator li…

12-图像梯度-Scharr算子和laplacian算子

Scharr算子 cv2.Scharr(img,cv2.CV_64F,1,0) 第一个参数:当前的图像对象名称 第二个参数:当前图像的深度,通常情况下指定为-1,表示输出和输入的深度是一样的;cv2.CV_64F可以存6字节的大小,为了方便后面的取…

新的一年新希望,百忙中继续学习

公司来了一批新同事,我又忙于购买设备,布置办公桌了。 小林建议我找一份更合适的工作,目前的我其实是在混日子,因为我并不擅长沟通与销售。 暂时还是保持这样吧,我还需要一定时间来积蓄力量。 转载于:https://www.cnbl…

Oracle Internal Event:10200 Consistent Read诊断事件

10200(consistent read buffer status)内部诊断事件可以用于探测一致性读CR(consistent read)块的访问情况,虽然cr读的统计信息可以从v$sysstat或AWR/statspack中获取,但是10200 event还是我们研究Consistent Read一致性读的有力工具。该事件可以通过在会…

多线程循环输出abcc++_C ++循环| 查找输出程序| 套装4

多线程循环输出abccProgram 1: 程序1&#xff1a; #include <iostream>using namespace std;int A 5;int fun(){return A--;}int main(){int A 5;while (fun()) {cout << A ::A << " ";}return 0;}Output: 输出&#xff1a; 9 8 7 6 5Explana…

Opencv——图像金字塔与图像尺寸缩放

主要讲解 1、resize()函数调用 函数定义&#xff1a; 调用方式&#xff1a; resize(srcImage, dstImage, Size(64, 128)); //对图片进行修改 resize(srcImage, dstImage, Size(), 0.5, 0.5);第6个参数的含义&#xff1a; INTER_NEAREST:最邻近插值 (放大好用) INTER_ARE…

java nature_Java中BufferedReader和scanner的对比 - nature

原地址&#xff1a;http://blog.sina.com.cn/s/blog_5fd837410100rtwk.html Scanner 和BufferedReader同样能实现将键盘输入的数据送入程序&#xff0c; import java.io.*; import java.util.Scanner; public class C { public static void main(String []args) throws IOExcep…

13-Canny边缘检测

Canny边缘检测主要思路步骤如下&#xff1a; 1&#xff0c;使用高斯滤波器&#xff0c;以平滑图像&#xff0c;滤除噪声 2&#xff0c;计算图像中每个像素点的梯度强度和方向 3&#xff0c;应用非极大值抑制&#xff0c;以消除边缘检测带来的杂散响应 4&#xff0c;应用双阈值检…

c# uri.host_C#| Uri.IsHexEncoding()方法与示例

c# uri.hostUri.IsHexEncoding()方法 (Uri.IsHexEncoding() Method) Uri.IsHexEncoding() method is a static method or Uri class. Which is used to return that given string is hex-encoded or not? If the given string is hex coded then it returns true otherwise it…

一位老鸟对 23 种设计模式的有趣见解(转)

在网络上流畅很广的一篇旧文&#xff0c;暂时没找到原作者&#xff0c;目前所看到的最早转载时间是 2005 年 2 月 28 日。作者用轻松的语言&#xff0c;形象解释了 23 种模式&#xff0c;有很好的启发作用。创建型模式 1、FACTORY—追MM少不了请吃饭了&#xff0c;麦当劳的鸡翅…

微机原理——移位指令

例题 思路 选择移位语句&#xff0c;右移&#xff0c;将AL移出的送入DX左端&#xff0c;将BL移出的送入DX左端。循环八次 MOV AL,01100101B; MOV BL,11011010B; XOR DX,DX;两个值相同&#xff0c;异或结果为0。等效&#xff1a;MOV DX,0 MOV CX,8;count L1: SHR AL,1;逻辑右…

14-图像金字塔

由第一个图可知&#xff0c;图像金字塔这无非就是对图像进行放大和缩小罢了 1&#xff0c;高斯金字塔 向下采样方法(缩小)&#xff0c;越采样越小&#xff0c;即从金字塔底部向上采样 cv2.pyrDown(img) 向上采样方法(放大)&#xff0c;越采样越大&#xff0c;即从金字塔顶…

JAVA和javascrito_JAVA 和JavaScript的split方法异同

Split的方法很常用&#xff0c;除了str.split("regex")&#xff0c;其实还可以多传一个参数&#xff1a;str.split("regex", limit)。但是要注意&#xff0c;JavaScript和java的split中limit参数作用是不同的。简单说&#xff0c;JavaScript中&#xff0c;…

如果__name__ =='__main__':在Python中怎么办?

In order to understand the details of __name__ variable and the if condition, let us go through a simple exercise. Run a simple python file with just the following lines and run the file as python3 code, 为了了解__name__变量和if条件的详细信息&#xff0c;让…

Eclipse C/C++开发环境搭建

1 Eclipse的安装 到http://java.sun.com/j2se/1.5.0/download.jsp 下载JRE安装&#xff1b; 到http://eclipse.org下载Eclipse安装。&#xff08;这儿可以下载Java版本的&#xff0c;也可以下载C/C 版本的&#xff09; 2 对于下载的Java版本或着只下载Eclipse IDE的&#xff0c…

微机原理——寻址方式总结

一、操作数的寻址方式 立即寻址方式 格式: 操作码 数字表达式&#xff08;将数据送入寄存器中&#xff09; 源操作数可以是8位也可以是16位。 MOV AH, F5H &#xff08;字节操作&#xff09; F5H称为立即数(8位操作数) MOV AL, 8AH &#xff08;字节操作&#xff09; 8AH称为…

15-轮廓检测

边缘是零零散散的&#xff0c;而轮廓是一个整体 cv2.findContours(img,mode,method) img&#xff1a;输入图像对象名称 mode&#xff1a;轮廓检索模式 RETR_EXTERNAL&#xff1a;只检索最外面的轮廓 RETR_LIST&#xff1a;检索所有的轮廓&#xff0c;并将其保存到一条链表当中…

抛硬币仿真实验java_探索HyperLogLog算法(含Java实现)

引言HyperLogLog算法经常在数据库中被用来统计某一字段的Distinct Value(下文简称DV)&#xff0c;比如Redis的HyperLogLog结构&#xff0c;出于好奇探索了一下这个算法的原理&#xff0c;无奈中文资料很少&#xff0c;只能直接去阅读论文以及一些英文资料&#xff0c;总结成此文…

kotlin键值对数组_Kotlin程序以升序对数组进行排序

kotlin键值对数组Given an array, we have to sort its elements in ascending order. 给定一个数组&#xff0c;我们必须按升序对其元素进行排序。 Example: 例&#xff1a; Input:arr [10, 20, 5, 2, 30]Output:sorted array (Ascending Order): [2, 5, 10, 20, 30]在Kotl…