Hit or Miss
1 개요
Morpholgy Hit or Miss 연산을 수행하는 알고리즘입니다.
주로 이미지 분석에서 형태 검출에 사용되며. 특히 특정 패턴이나 구조를 찾는 데 유용합니다.
2 알고리즘 상세 설명
사용자가 설정한 커널로 적중, 비적중 변환을 사용하여 이미지의 주어진 구성을 감지하는 연산입니다.
각 Pixel의 결과값은 커널 영역 내의 Hit 집합과 Miss 집합의 결과값 중 최솟값입니다.
A⊛B=(A⊝B1)∩(Ac⊝B2)
- A : 커널 영역 내의 pixel 집합
- B1 : 커널 영역 내의 Hit 집합
- B2 : 커널 영역 내의 Miss 집합
- A⊝B1 : B1 집합과 매칭되는 A 집합 내의 Pixel 값 중 최솟값
- Ac⊝B2 : B2 집합과 매칭되는 A 집합 내의 Pixel에 1의 보수를 취한 값 중 최솟값
3 Kernel 설정
FLImaging에서 Kernel을 설정하는 방법입니다.
- 우측 상단의 Set Kernel 버튼을 클릭합니다.

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

Fig. Set Kernel
설정한 커널로 실행한 예시 이미지입니다.
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>> listKernel;
listKernel.PushBack(CFLArray<float>());
listKernel[0].PushBack(0.f);
listKernel[0].PushBack(0.f);
listKernel[0].PushBack(-1.f);
listKernel.PushBack(CFLArray<float>());
listKernel[1].PushBack(0.f);
listKernel[1].PushBack(-1.f);
listKernel[1].PushBack(1.f);
listKernel.PushBack(CFLArray<float>());
listKernel[2].PushBack(-1.f);
listKernel[2].PushBack(1.f);
listKernel[2].PushBack(1.f);
hitOrMiss.SetKernel(listKernel);
hitOrMiss.Execute();
CFLImage fliSourceImage = new CFLImage();
CFLImage fliDestinationImage = new CFLImage();
CMorphologyHitOrMiss hitOrMiss = new CMorphologyHitOrMiss();
hitOrMiss.SetSourceImage(ref fliSourceImage);
hitOrMiss.SetDestinationImage(ref fliDestinationImage);
List<List<float>> listKernel = new List<List<float>>();
listKernel.Add(new List<float>());
listKernel[0].Add(0.000000f);
listKernel[0].Add(0.000000f);
listKernel[0].Add(-1.000000f);
listKernel.Add(new List<float>());
listKernel[1].Add(0.000000f);
listKernel[1].Add(-1.000000f);
listKernel[1].Add(1.000000f);
listKernel.Add(new List<float>());
listKernel[2].Add(-1.000000f);
listKernel[2].Add(1.000000f);
listKernel[2].Add(-1.000000f);
hitOrMiss.SetKernel(listKernel);
hitOrMiss.Execute();
fliSourceImage = CFLImage()
fliDestinationImage = CFLImage()
hitOrMiss = CMorphologyHitOrMiss()
hitOrMiss.SetSourceImage(fliSourceImage)
hitOrMiss.SetDestinationImage(fliDestinationImage)
listKernel = List[List[Single]]()
listKernel.Add(List[Single]())
listKernel[0].Add(0.000000)
listKernel[0].Add(0.000000)
listKernel[0].Add(-1.000000)
listKernel.Add(List[Single]())
listKernel[1].Add(0.000000)
listKernel[1].Add(-1.000000)
listKernel[1].Add(1.000000)
listKernel.Add(List[Single]())
listKernel[2].Add(-1.000000)
listKernel[2].Add(1.000000)
listKernel[2].Add(-1.000000)
hitOrMiss.SetKernel(listKernel)
hitOrMiss.Execute()