Geometric Match

1.1.1 개요

이미지 내의 기하학적 정보 패턴을 학습하고 검사 이미지에서 이미지 내의 동일 혹은 유사한 패턴을 탐지하는 알고리즘입니다.

1.1.2 알고리즘 상세 설명

기하학적 요소를 기반으로 탐색함으로 인해 기존 패턴 매칭방식에서 할 수 없는 폭넓은 범위의 탐지가 가능합니다.

학습 데이터 주변 환경 변화 가려짐 현상
학습 데이터 외부 패턴 변화 가려짐 현상
주변 상태 변화
Fig. Geometric Match 동작 예시

Fig. 예시와 같이 학습 데이터의 주변환경과 검사 이미지의 주변환경은 매우 다른 상태입니다. 하지만 기하 매칭 알고리즘은 주변환경이 변하더라도 정확히 해당 기하학적 정보만을 바탕으로 결과를 판단하기 때문에 주변상태와 무관하게 정확한 결과를 얻을 수 있습니다. 주변 환경 변화와 같이 십자가 주변의 환경이나 십자가 뒷면에 다른 형상이 있어 해당 영역에 영향을 주더라도 정확한 결과를 제공하게 됩니다. 또한 설비상 오류로 인해 패턴이 일부 훼손된 상태로 가려짐이 발생하더라도 기하 패턴에 대한 탐지가 가능합니다.

높은 수준의 정확도를 가진 매칭뿐만 아니라 사용자의 환경에 맞는 학습 환경을 제공하기위해 FLImaging® Geometric Match만의 커스터마이징 학습방법을 제공합니다.

Template Match Geometric Match
Fig. 모든 도형의 학습 영역 지원

직사각형, 원뿐만 아니라 타원, 임의의 다각형, 곡선형 도형 등 FLImaging®에서 지원하는 모든 도형의 관심영역을 학습영역으로 사용가능합니다.

학습 이미지 내 노이즈 부분이 특징점으로 학습될 수가 있습니다. 전체적인 형태 정보만 필요하고 내부 노이즈 패턴이 불필요한 상황에 대한 처리를 위해 필터링 기능을 제공합니다. 학습 과정에서 발생하는 작은 노이즈부터 불필요한 작은 패턴까지 모두 필터링 가능함으로써 손쉬운 학습이 가능합니다.

Template Match Geometric Match
Fig. 사용자가 원하는 구역에 대한 학습

1.1.3 학습 방법

  1. FLImaging® 개발 스튜디오을 실행합니다.
개발 스튜디오 실행 화면
개발 스튜디오 실행 화면
  1. Menu 검색창에 Geometric Match를 검색하거나 Advanced Functions에 Match 카테고리에 Geometric을 클릭합니다.
알고리즘 검색
알고리즘 검색
  1. 학습할 이미지를 불러옵니다.
    • 뷰에 마우스 우측 버튼 클릭 후 Load File 선택
Load File 선택
Load File 선택
파일 선택
파일 선택
이미지 파일 열기
이미지 파일 열기 완료
  1. 학습할 뷰를 선택합니다.
View 선택
View 선택
View 선택 완료
View 선택 완료
  1. 학습 영역을 지정합니다.
    • Learn View ROI에 항목에 마우스 우측 버튼을 클릭하여 Rect ROI를 클릭합니다.
ROI 타입 선택
ROI 타입 선택
ROI 영역 지정
ROI 영역 지정
ROI 등록
ROI 등록
영역 지정 완료
영역 지정 완료
  1. 학습을 진행합니다.
    • 버튼(F6)을 클릭합니다.
학습 진행
학습 진행
메세지 출력
메세지 출력
학습 완료
학습 완료

해당 동작을 코드로 표현하면 다음과 같습니다.

CGeometricMatch geometricMatch; // 알고리즘 객체 선언

CFLImage fliLearnImage; // 이미지 객체 선언
fliLearnImage.Load(L"D:/Learn.png"); // 이미지 파일 로드
geometricMatch.SetLearnImage(fliLearnImage);// 학습 이미지 입력

CFLRect<double> flfLearnROI(88.407643, 142.165605, 305.477707, 345.477707, 0.000000); // 학습 영역 생성 
geometricMatch.SetLearnROI(flfLearnROI); // 학습 영역 입력

geometricMatch.Learn(); // 학습
CGeometricMatch geometricMatch = new CGeometricMatch(); // 알고리즘 객체 선언

CFLImage fliLearnImage = new CFLImage(); // 이미지 객체 선언
fliLearnImage.Load("D:/Learn.png"); // 이미지 파일 로드
geometricMatch.SetLearnImage(ref fliLearnImage);// 학습 이미지 입력

CFLRect<double> flfLearnROI = new CFLRect<double>(88.407643, 142.165605, 305.477707, 345.477707, 0.000000); // 학습 영역 생성 
geometricMatch.SetLearnROI(flfLearnROI); // 학습 영역 입력

geometricMatch.Learn(); // 학습
geometricMatch = CGeometricMatch() # 알고리즘 객체 선언

fliLearnImage = CFLImage() # 이미지 객체 선언
fliLearnImage.Load("D:/Learn.png") # 이미지 파일 로드
geometricMatch.SetLearnImage(fliLearnImage)# 학습 이미지 입력

flfLearnROI = CFLRect[Double](88.407643, 142.165605, 305.477707, 345.477707, 0.000000) # 학습 영역 생성 
geometricMatch.SetLearnROI(flfLearnROI) # 학습 영역 입력

geometricMatch.Learn() # 학습

1.1.4 검사 방법

  1. 검사를 진행할 이미지를 불러옵니다.
Load File 선택
Load File 선택
파일 선택
파일 선택
이미지 파일 열기
이미지 파일 열기 완료
  1. 검사할 뷰를 선택합니다.
View 선택
View 선택
  1. 검사 옵션을 설정합니다.
옵션 설정
옵션 설정

Scale Min: 탐색할 패턴의 최소 크기 비율을 설정합니다.
Scale Max: 탐색할 패턴의 최대 크기 비율을 설정합니다.
Angle Bias: 패턴 탐색 시 기준이 되는 회전 각도를 설정합니다.
Angle Tolerance: 허용되는 회전 각도의 범위를 설정합니다.
Minimum Score: 탐색된 패턴의 최소 신뢰도 점수를 설정합니다.
Max Object: 이미지에서 탐색할 패턴의 최대 개수를 설정합니다.
Interpolation: 탐색 시 이미지 보간 방식을 설정합니다.

  1. 검사를 진행합니다.
    • Exectue 버튼 클릭(F5)
옵션 설정
옵션 설정
  1. 정상 검사 동작 완료시 다음과 같이 출력됩니다.
검사 완료
검사 완료

해당 동작을 코드로 표현하면 다음과 같습니다.

CGeometricMatch geometricMatch; // 학습한 알고리즘 객체와 동일해야합니다.

CFLImage fliSourceImage; // 이미지 객체 선언
fliSourceImage.Load(L"D:/Find.png"); // 이미지 파일 로드
geometricMatch.SetSourceImage(fliSourceImage); // 검사 이미지 입력 
geometricMatch.SetAngleTolerance(90.000000); // 검사 동작 범위 입력 (-90 ~ 90)
geometricMatch.SetMaxObject(3); // 검출학 객체수 출력

geometricMatch.Execute();// 검사 동작

int64_t i64Size = geometricMatch.GetResultCount(); // 검사 결과 갯수 확인

for(int64_t i = 0; i < i64Size; ++i) // 검사 결과 데이터 가져오기
{
	CGeometricMatch::SResult results;
	geometricMatch.GetResult(i, results);
}
CGeometricMatch geometricMatch = new CGeometricMatch(); // 학습한 알고리즘 객체와 동일해야합니다.

CFLImage fliSourceImage = new CFLImage(); // 이미지 객체 선언
fliSourceImage.Load("D:/Find.png"); // 이미지 파일 로드
geometricMatch.SetSourceImage(ref fliSourceImage); // 검사 이미지 입력 
geometricMatch.SetAngleTolerance(90.000000); // 검사 동작 범위 입력 (-90 ~ 90)
geometricMatch.SetMaxObject(3); // 검출학 객체수 출력

geometricMatch.Execute();// 검사 동작

long i64Size = geometricMatch.GetResultCount(); // 검사 결과 갯수 확인

for(long i = 0; i < i64Size; ++i) // 검사 결과 데이터 가져오기
{
	CGeometricMatch.SResult results = new CGeometricMatch.SResult();
	geometricMatch.GetResult(i, ref results);
}
geometricMatch = CGeometricMatch() # 학습한 알고리즘 객체와 동일해야합니다.

fliSourceImage = CFLImage() # 이미지 객체 선언
fliSourceImage.Load("D:/Find.png") # 이미지 파일 로드
geometricMatch.SetSourceImage(fliSourceImage) # 검사 이미지 입력 
geometricMatch.SetAngleTolerance(90.000000) # 검사 동작 범위 입력 (-90 ~ 90)
geometricMatch.SetMaxObject(3) # 검출학 객체수 출력

geometricMatch.Execute()# 검사 동작

i64Size = geometricMatch.GetResultCount() # 검사 결과 갯수 확인

for i in range(i64Size): # 검사 결과 데이터 가져오기
	results = CGeometricMatch.SResult()
	geometricMatch.GetResult(i, results)

1.1.5 학습 동작 함수

1.1.6 검사 동작 함수

1.1.7 동작 결과 취득 함수

1.1.8 Learn Weight ROI 상세 설명

기본 학습 진행시 전체적인 학습 영역에서 기하학적 요소에 특징점을 고르게 선출하게되는데 Learn Weight ROI는 특정 영역에 가중치를 주어 해당 영역에 특징점 선출 비율을 조절 할 수 있습니다.

학습 이미지 학습 영역 지정 학습 결과 (특징점)
학습 이미지 원본 이미지 결과 원본 이미지 결과
Fig. 기본 학습 동작 결과

Weight ROI 지정(좌 0.1 우 0.9) 학습 결과
학습 이미지 원본 이미지 결과
Fig. Learn Weight 지정 결과 좌측 0.1, 우측 0.9

Fig. 학습 결과를 보면 같이 기본 동작에 학습을 진행시 특징점 위치가 전반적으로 분포됩니다. Figure 는 좌측에 가중치를 0.1 우측 영역에 0.9를 지정하고 학습 진행시 점에 특징점 분포가 가중치에 맞게 선출되게 됩니다.

Weight ROI 지정(가중치 0) 학습 결과
Weight ROI 지정(가중치 0) 학습 결과
Fig. Learn Weight 가중치 0

특정 영역에 가중치를 0으로 설정할 수 있습니다.
Fig. 과 같이 내부에 사각형 영역을 지정하고 가중치를 0으로 설정하여 해당 영역에 특징점에 뽑히지 않는 것을 확인할 수 있습니다.

1.1.9 Learn Guide Shape ROI 상세 설명

Learn Guide Shape ROI는 지정 영역에 선을 통해 가중치 비율에 맞게 원하는 위치에 특징점을 뽑을 수가 있습니다.
가이드 영역에 선분에 입력한 Tolerance 거리 차이 내에 기하하적 요소에 특징점을 가중치에 맞게 추출합니다.
Fig. 에 학습 결과를 확인하면 입력한 가이드 영역에 위치에 따라 특징점이 추출됩니다. 특징점이 선출되는 비율은 가중치를 통해 조절이 가능합니다.

Guide Shape 영역 지정 학습 결과
Guide Shape 영역 지정 학습 결과
Guide Shape 영역 지정 학습 결과
Guide Shape 영역 지정 학습 결과
Guide Shape 영역 지정 학습 결과
Guide Shape 영역 지정 학습 결과
Fig. Guide Shape 사용 예

1.1.10 학습 데이터 Save & Load 방법 설명

학습한 데이터 파일을 저장 및 불러오기가 가능합니다.
이미 학습한 파일을 저장하여 편리하게 관리할 수 있습니다.

1.1.10.1 Save 동작 설명

학습을 진행한 후 해당 학습 데이터 파일을 파일로 저장할 수 있습니다.
Learn 동작을 진행한 이후 저장을 진행 할 수 있습니다.

CGeometricMatch geometricMatch;// 알고리즘 객체

// 패턴 학습
CFLImage fliLearnImage; // 이미지 객체
CFLRect<double> flfLearnROI; // 학습 관심 영역
geometricMatch.SetLearnImage(fliLearnImage); // 학습 이미지 입력
geometricMatch.SetLearnROI(flfLearnROI); // 학습 관심 영역 입력
geometricMatch.Learn(); // 학습 진행

// 학습 파일 Save 진행
geometricMatch.Save(L"파일 경로 입력"); // 파일 포멧은 .flg
CGeometricMatch geometricMatch = new CGeometricMatch();// 알고리즘 객체

// 패턴 학습
CFLImage fliLearnImage = new CFLImage(); // 이미지 객체
CFLRect<double> flfLearnROI = new CFLRect<double>(); // 학습 관심 영역
geometricMatch.SetLearnImage(ref fliLearnImage); // 학습 이미지 입력
geometricMatch.SetLearnROI(flfLearnROI); // 학습 관심 영역 입력
geometricMatch.Learn(); // 학습 진행

// 학습 파일 Save 진행
geometricMatch.Save("파일 경로 입력"); // 파일 포멧은 .flg
geometricMatch = CGeometricMatch()# 알고리즘 객체

# 패턴 학습
fliLearnImage = CFLImage() # 이미지 객체
flfLearnROI = CFLRect[Double]() # 학습 관심 영역
geometricMatch.SetLearnImage(fliLearnImage) # 학습 이미지 입력
geometricMatch.SetLearnROI(flfLearnROI) # 학습 관심 영역 입력
geometricMatch.Learn() # 학습 진행

# 학습 파일 Save 진행
geometricMatch.Save("파일 경로 입력") # 파일 포멧은 .flg

1.1.10.2 Load 동작 설명

저장한 학습 파일을 불러오기가 가능합니다.
저장한 파일을 불러와서 바로 검사 진행이 바로 가능합니다.

CGeometricMatch geometricMatch; // 알고리즘 객체

// 학습 파일 Load 진행
geometricMatch.Load(L"파일 경로 입력"); // 파일 포멧은 .flg

// 패턴 탐색
CFLImage fliSourceImage; // 검사할 이미지 객체
geometricMatch.SetSourceImage(fliSourceImage); // 검사 이미지 입력
geometricMatch.Execute(); // 검사 동작
CGeometricMatch geometricMatch = new CGeometricMatch(); // 알고리즘 객체

// 학습 파일 Load 진행
geometricMatch.Load("파일 경로 입력"); // 파일 포멧은 .flg

// 패턴 탐색
CFLImage fliSourceImage = new CFLImage(); // 검사할 이미지 객체
geometricMatch.SetSourceImage(ref fliSourceImage); // 검사 이미지 입력
geometricMatch.Execute(); // 검사 동작
geometricMatch = CGeometricMatch() # 알고리즘 객체

# 학습 파일 Load 진행
geometricMatch.Load("파일 경로 입력") # 파일 포멧은 .flg

# 패턴 탐색
fliSourceImage = CFLImage() # 검사할 이미지 객체
geometricMatch.SetSourceImage(fliSourceImage) # 검사 이미지 입력
geometricMatch.Execute() # 검사 동작