Hit or Miss

1 개요

Morpholgy Hit or Miss 연산을 수행하는 알고리즘입니다.
주로 이미지 분석에서 형태 검출에 사용되며. 특히 특정 패턴이나 구조를 찾는 데 유용합니다.

2 알고리즘 상세 설명

사용자가 설정한 커널로 적중, 비적중 변환을 사용하여 이미지의 주어진 구성을 감지하는 연산입니다. 각 Pixel의 결과값은 커널 영역 내의 Hit 집합과 Miss 집합의 결과값 중 최솟값입니다.

AB=(AB1)(AcB2)A \circledast B = (A \circleddash B_{1}) \cap (A^{c} \circleddash B_{2})

3 Kernel 설정

FLImaging에서 Kernel을 설정하는 방법입니다.

  1. 우측 상단의 Set Kernel 버튼을 클릭합니다.

Fig. Hit or Miss Property


  1. Kernel의 Half Width와 Half Height를 설정 후 구성 요소를 설정합니다.
    • 1 : Hit Element
    • 0 : Miss Element
    • -1 : Ignore Condition

Fig. Set Kernel


설정한 커널로 실행한 예시 이미지입니다.
Source Image Destination Image
Source Image Destination Image
Source Image Destination Image
Fig. Hit or Miss Example

4 예제

CFLImage fliSourceImage;
CFLImage fliDestinationImage;

CMorphologyHitOrMiss hitOrMiss;

hitOrMiss.SetSourceImage(fliSourceImage);
hitOrMiss.SetDestinationImage(fliDestinationImage);

// 커널 성분
CFLArray<CFLArray<float>> flarrKernel;
flarrKernel.PushBack(CFLArray<float>());
flarrKernel[0].PushBack(0.f);
flarrKernel[0].PushBack(0.f);
flarrKernel[0].PushBack(-1.f);

flarrKernel.PushBack(CFLArray<float>());
flarrKernel[1].PushBack(0.f);
flarrKernel[1].PushBack(-1.f);
flarrKernel[1].PushBack(1.f);

flarrKernel.PushBack(CFLArray<float>());
flarrKernel[2].PushBack(-1.f);
flarrKernel[2].PushBack(1.f);
flarrKernel[2].PushBack(1.f);

hitOrMiss.SetKernel(flarrKernel);
hitOrMiss.Execute();

CFLImage fliSourceImage = new CFLImage();
CFLImage fliDestinationImage = new CFLImage();

CMorphologyHitOrMiss hitOrMiss = new CMorphologyHitOrMiss();

hitOrMiss.SetSourceImage(ref fliSourceImage);
hitOrMiss.SetDestinationImage(ref fliDestinationImage);

List<List<List<float>>> flarrKernel = new List<List<List<float>>>();
List<List<float>> flarrRowElement = new List<List<float>>();
List<float> flarrKernelElement = new List<float>();
flarrRowElement.Clear();
flarrKernelElement.Clear();
flarrKernelElement.Add(0.000000f);
flarrKernelElement.Add(0.000000f);
flarrKernelElement.Add(-1.000000f);
flarrRowElement.Add(new List<float>(flarrKernelElement));

flarrKernelElement.Clear();
flarrKernelElement.Add(0.000000f);
flarrKernelElement.Add(-1.000000f);
flarrKernelElement.Add(1.000000f);
flarrRowElement.Add(new List<float>(flarrKernelElement));

flarrKernelElement.Clear();
flarrKernelElement.Add(-1.000000f);
flarrKernelElement.Add(1.000000f);
flarrKernelElement.Add(1.000000f);
flarrRowElement.Add(new List<float>(flarrKernelElement));

flarrKernel.Add(new List<List<float>>(flarrRowElement));

hitOrMiss.SetKernel(flarrKernel);

hitOrMiss.Execute();