击中击不中_击中击不中变换 - CSDN
精华内容
参与话题
  • 击中击不中变换击中击不中变换是形状检测的一个基本工具,先看定义一般来说,设给定原图像X中包含A在内的多个不同物体,假设定位目标A,为此设置一个形状模板A,此时取一个比A稍大的B,且A不与B的边缘相交,令B1=A,...

    一. 击中击不中变换

    击中击不中变换是形状检测的一个基本工具,先看定义


    一般来说,设给定原图像X中包含A在内的多个不同物体,假设定位目标A,为此设置一个形状模板A,此时取一个比A稍大的B,且A不与B的边缘相交,令B1=A,B2=B-A;如下图所示:


    算法步骤

    一、开三个内存缓冲区,用来保存原图像数据,结构元素H对原图像的腐蚀结果,结构元素M对原图像补集的腐蚀结果

    二、保存原图像数据,用结构元素H对原图像腐蚀,并保存腐蚀后的结果

    三、恢复原图像,并对其求补

    四、用结构元素M对原图像的补进行腐蚀操作,并保存腐蚀后的结果

    五、求两个腐蚀结果的交集,即击中与击不中的结果

    二. 骨架提取

    骨架提取可以通过选定合适的结构元素B,对X进行连续腐蚀和开运算来求得。


    算法步骤:

    一、获得原图像的首地址及图像的宽和高,并设置循环标志1

    二、用结构元素腐蚀原图像,并保存腐蚀结果

    三、设置循环标志为0,如果腐蚀结果中有一个点为255,即原图像尚未被完全腐蚀成空集,则将循环标志设为1.

    四、用结构元素对腐蚀后的图像进行开运算(消除小的白色区域),并求取腐蚀运算与开运算的差(得到消除的白色区域)

    五、用【四】中求得的结果与之前求得的骨架进行并集运算,以获得本次循环求得的骨架

    六、把本次循环中保存的腐蚀结果赋值给原图像

    七、重复步骤【2】-【6】,直到将原图像腐蚀成空集为止。

    最终求得的骨架就是结果。

    这两部分的代码都没有调通,就不上代码了,欢迎指正。

    展开全文
  • #include"matrix.h" #include"iostream.h" voidmain(void) {          grayimag A, G;  ...

    #include"matrix.h"

    #include"iostream.h"

    voidmain(void)

    {

             grayimag A, G;

             A.GetGray("D:\\grayimag_test\\原图\\击中击不中.bmp");

             A.ViewImag();

                      

             int x,y,u,v;

            

            

             G.GetGray("D:\\grayimag_test\\原图\\击中正方子图.bmp");

             if(G.HitMiss01(A,x,y,u,v))

             {

                       grayimag B=A;

                       B.Clip(x,y,u,v);

                       grayimag C(A.Height(),A.Width());

                       B.Cover(C,x,y);        

                       C.ViewImag();

             }          

             else

                       cout<<"没找到正方子图"<<endl;

     

             G.GetGray("D:\\grayimag_test\\原图\\击中圆子图.bmp");

             if(G.HitMiss01(A,x,y,u,v))

             {

                       grayimag B=A;

                       B.Clip(x,y,u,v);

                       grayimag C(A.Height(),A.Width());

                       B.Cover(C,x,y);

                       C.ViewImag();

             }

             else

                       cout<<"没找到圆方子图"<<endl;

     

             G.GetGray("D:\\grayimag_test\\原图\\击中三角子图.bmp");

             if(G.HitMiss01(A,x,y,u,v))

             {

                       grayimag B=A;

                       B.Clip(x,y,u,v);

                       grayimag C(A.Height(),A.Width());

                       B.Cover(C,x,y);

                       C.ViewImag();

             }

             else

                       cout<<"没找到三角子图"<<endl;

     

     

             G.GetGray("D:\\grayimag_test\\原图\\击中7子图.bmp");

             if(G.HitMiss01(A,x,y,u,v))

             {

                       grayimag B=A;

                       B.Clip(x,y,u,v);

                       grayimag C(A.Height(),A.Width());

                       B.Cover(C,x,y);

                       C.ViewImag();

             }

             else

                       cout<<"没找到7子图"<<endl;

     

             G.GetGray("D:\\grayimag_test\\原图\\击中我子图.bmp");

             if(G.HitMiss01(A,x,y,u,v))

             {

                       grayimag B=A;

                       B.Clip(x,y,u,v);

                       grayimag C(A.Height(),A.Width());

                       B.Cover(C,x,y);

                       C.ViewImag();

             }

             else

                       cout<<"没找到我子图"<<endl;

     

     

     

             G.GetGray("D:\\grayimag_test\\原图\\击中A子图.bmp");

             if(G.HitMiss01(A,x,y,u,v))

             {

                       grayimag B=A;

                       B.Clip(x,y,u,v);

                       grayimag C(A.Height(),A.Width());

                       B.Cover(C,x,y);

                       C.ViewImag();

             }

             else

                       cout<<"没找到A子图"<<endl;

     

     

        G.GetGray("D:\\grayimag_test\\原图\\击中3子图.bmp");

             if(G.HitMiss01(A,x,y,u,v))

             {

                       grayimag B=A;

                       B.Clip(x,y,u,v);

                       grayimag C(A.Height(),A.Width());

                       B.Cover(C,x,y);

                       C.ViewImag();

             }

             else

                       cout<<"没找到3子图"<<endl;

    }


    #include"iostream.h"

    #include"matrix.h"

    voidmain(void)

    {

             grayimag A, G;

             A.GetGray("D:\\grayimag_test\\原图\\击中击不中.bmp");

             A.ViewImag();

     

             int x,y,u,v;

            

             G.GetGray("D:\\grayimag_test\\原图\\击中缩小的正方子图.bmp");

             if(G.HitMiss01(A,x,y,u,v,5))

             {

                       cout<<"t=5  击中子图"<<endl;                                

            grayimag B=A;

                       B.Clip(x,y,u,v);

                       grayimagC(A.Height(),A.Width());

                       B.Cover(C,x,y);

                       C.ViewImag();          

             }

             else

                       cout<<"t=5  没击中子图"<<endl;

            

            

     

             if(G.HitMiss01(A,x,y,u,v,6))

             {

                       cout<<"t=6  击中子图"<<endl;                                

            grayimag B=A;

                       B.Clip(x,y,u,v);

                       grayimagC(A.Height(),A.Width());

                       B.Cover(C,x,y);

                       C.ViewImag();            

             }

             else

                       cout<<"t=6  没击中子图"<<endl;

            

    }



    展开全文
  • 击中击不中理解

    千次阅读 2016-03-22 22:47:49
    击中击不中

    击中与击不中的概念就不背书了,刚开始看的时候很绕,后来自己用halcon做test的时候,发现对于W这个结构元素的选择很模糊,后来通过实验才恍然大悟,


    最简单的形象理解其实就是其字面意思!!!

    第一个结构元素要能击中图像(就是region全部包含结构元素!)

    第二个结构元素要不能击中图像!(就是region与结构元素无任何交集)


    展开全文
  • 击中击不中变换的作用理解

    万次阅读 多人点赞 2015-12-01 13:17:35
    学习形态学变换的时候,看到击中击不中变换一直百思不得其解,虽然他的定义写的很清楚明白,但是不知道具体是干嘛用的,按照自己的理解写了一个matlab小程序来试试。 1、击中击不中变换是形态学形状检测的基本工具...

    学习形态学变换的时候,看到击中击不中变换一直百思不得其解,虽然他的定义写的很清楚明白,但是不知道具体是干嘛用的,按照自己的理解写了一个matlab小程序来试试。

    1、击中击不中变换是形态学形状检测的基本工具,是用来查找像素局部模式的形态学运算符。‘局部’是指‘结构元素’的大小。

    两个不相交集合B={B1,B2},称B为复合结构元素。则击中击不中变换为:

    文字描述感觉更清楚:用B1去腐蚀X,然后用B2去腐蚀X的补集,得到的结果相减就是击中击不中变换。

    2.用表格模拟击中击不中变换:黑色为要检测边缘的物体,B1B2为不相交结构元素



    先用B1腐蚀黑色部分,再用B2腐蚀黑色以外的部分,得到:


    浅绿色为B1腐蚀后,黑色物体所剩下的元素,深绿色为B2腐蚀后,黑色物体以外的图像所剩下的部分,黑灰为两次腐蚀所得到的边缘信息。

    3.自己写的程序:

    clc;
    clear all;
    
    b1=strel('disk',5);
    b2=strel('disk',5);
    I=imread('woman.jpg');
    I=rgb2gray(I);
    H=im2bw(I);
    J=~H;%原图取反
    K=imerode(H,b1);%用算子1去腐蚀原图
    L=imerode(J,b2);%用算子2去腐蚀原图的补集
    K1=mat2gray(K);
    L1=mat2gray(L);
    R=mat2gray(H-K);%原图直接减去用算子1腐蚀的结果
    M1=K-L;%击中击不中变换
    M2=abs(K-L);%击中击不中变换的绝对值
    R1=mat2gray(M1);
    % R2=mat2gray(M2);%
    R3=mat2gray(~M2);%击中击不中变换绝对值取反
    figure(1);
    subplot(231),imshow(H),title('原图灰度图');
    subplot(232),imshow(K1);title('算子1腐蚀结果');
    subplot(233),imshow(L1),title('算子2腐蚀结果');
    subplot(234),imshow(R),title('原图直接减去腐蚀2结果');
    subplot(235),imshow(R1),title('击中击不中变换结果');
    subplot(236),imshow(R3),title('击中击不中变换取绝对值载取反结果');
    

    得到的结果:

    原图是:

    相对于原图直接减去腐蚀的图像,击中击不中变换保留了更多的细节,边缘也更加明显突出。当然具体的击中击不中变换到底何用我还是没有明确的答案,暂时只能这么理解了。

    展开全文
  • 击中击不中变换 原理 击中击不中变换(HMT)需要两个结构元素B1和B2,合成一个结构元素对B=(B1,B2) 一个用于探测图像内部,作为击中部分;另一个用于探测图像外部,作为击不中部分。显然,B1和B2是不应该相连接的,即B1∩B2=...
  • 图像处理3:击中击不中算法 (1)击中击不中简介: 击中击不中变换是形态学形状检测的基本工具,是用来查找像素局部模式的形态学运算符,其中局部是指结构元素的大小。 两个不相交集合B=(B1, B2),称B为复合结构元素...
  • 击中击不中的变换

    千次阅读 2018-11-03 20:14:28
    1.1 击中击不中的步骤 击中击不中变换是形态学形状检测的基本工具。 步骤为: 使用模板s1腐蚀原图像X 使用模板s2(s2为是s1的补)对Y(Y为X的补)进行腐蚀 对两个结果进行取交集 用击中结构去腐蚀原始图像得到...
  • 击中击不中变换

    2019-01-14 16:48:07
    击中击不中变换定义 击中击不中变换(HMT)需要两个结构元素B1和B2,合成一个结构元素对B=(B1,B2) 一个用于探测图像内部,作为击中部分;另一个用于探测图像外部,作为击不中部分。显然,B1和B2是不应该相连接的,即B1∩B2=...
  • 击中击不中变换 击中击不中变换是形状检测的一个基本工具。 设X为目标图像,B为结构元素,且B由两个不相交的部分B1B_1B1​和B2B_2B2​组成,即B=B1∪B2B=B_1∪B_2B=B1​∪B2​,且B1∩B2=ϕB_1∩B_2=\phiB1​∩B2​=...
  • 击中击不中变换(Hit Miss Transform ,HMT),是通过同时探测图像的内部和外部,进而获取更多的内外标记,体现更多信息的一个方法。他的应用有很多,特别是在图像识别以及图像细化方面。 定义 既然既要有击中也要...
  • Opencv实现击中击不中

    千次阅读 多人点赞 2014-04-08 19:43:48
    详细知识可以看击中击不中,里面的图示跟书本中介绍的差不多。 另外书本中介绍:背景的宽度选择会影响最后的计算结果,以致最终的计算结果是空集。 Mat input_image = src; Mat Kernel_S1 = imread
  • 击中击不中变换Matlab实现

    千次阅读 2014-11-08 15:47:27
    Matlab的击中击不中变换函数为bwhitmiss,调用形式为:
  • 数学形态学的细化算法,涉及数学形态的膨胀、腐蚀、开、闭、击中击不中变换
  • 数字图像处理入门(一) 击中击不中

    千次阅读 2013-11-18 18:19:06
    形态学的击中击不中是形状检测的基本工具。 其基本原理为:(集合X为原二值化图像的像素集合,对X取反求得~X(非X, Y表示), 选择的结构元为s1, 对结构元s1取反的结构元为s2) 首先对用s1对X进行腐蚀得到A1,, 用s2对...
  • 击中击不中(vc实现)

    千次阅读 2012-08-23 10:04:43
    void CISLSView::OnHMTA... //击中击不中 //李立宗 lilizong@gmail.com //2012-8-23 int structure1[3][3]={1,1,1,1,0,0,1,0,0}; int structure2[3][3]={0,0,0,0,1,1,0,1,0}; CImage myImage1Complement,my
  • 击中击不中变换的简单应用

    千次阅读 2017-05-31 17:20:02
    应用背景:在物体识别领域有许多方法,比如图像模板匹配,这里介绍基于击中击不中变换的物体识别。
  • opencv---击中击不中

    2020-03-14 09:52:48
    击中击不中属于图像形态学操作范畴,通过定义一定形状的结构元素,然后在图像中寻找与该结构元素相同的区域,找到即为击中,找不到即为击不中。 代码如下 #include<iostream> #include<opencv.hpp> ...
  • 击中击不中参考地址:https://blog.csdn.net/u013263891/article/details/83690309 https://wenku.baidu.com/view/2e3563779b89680202d82539.html https://blog.csdn.net/qq_20823641/article/details/52072418 .....
  • 操作目的 HitMiss变换是形态检测的一个工具,通过定义形状模板可以在图像中获取同一形状物体...2、用击不中结构去腐蚀原始图像的补集得到击不中结果Y(即在原始图像上找到击不中结构与原始图像没有交集的位置,这个...
1 2 3 4 5 ... 20
收藏数 2,634
精华内容 1,053
关键字:

击中击不中