Pattern Match Multi

1.1.1 개요

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

1.1.2 알고리즘 상세 설명

학습 이미지 원본 이미지 결과
학습 이미지 원본 이미지 결과
포커싱 불량 블러링 조명 밝기 오류
포커싱 불량 블러링 조명 밝기 오류
모션 블러링 표면 스크래치
포커싱 불량 블러링 조명 밝기 오류
조명 그라데이션 가려짐 현상
포커싱 불량 블러링 조명 밝기 오류
상황별 Pattern Match 동작 비교

FLImaging® Pattern Match은 이미지 픽셀 단위 이상의 부동소수점 단위의 정밀도를 제공합니다. 아래 Interpolation 적용 전후 비교에 이미지(왼쪽)와 검사이미지에 대하여 (+0.5, +0.5)만큼 이동변환된 이미지(오른쪽)입니다. 만약 픽셀단위의 결과만 제공할 수 있다면 (+0.5,+0.5)의 상태에 대하여 결과로 제공할 수 없습니다. 하지만 정밀한 보간방식을 이용하여 다음 이미지와 같이 정밀한 결과를 확인할 수 있습니다.

원본 이미지 (+0.5,+0.5) 이동변환 이미지
원본 이미지 (+0.5,+0.5) 이동변환 이미지
Interpolation 적용 전후 비교

알고리즘의 파라미터 설정 방식 또한 간단하여 파라미터 설정없이 동작이 가능하며, 사용자에 최적화된 성능을 제공하기 위한 하이퍼 파라미터가 존재하여 커스터마이징된 높은 처리속도의 정확한 결과를 얻을 수 있습니다.

CPatternMatchMulti patternMatchMulti; // 알고리즘 객체

// 패턴 학습
CFLImage fliLearnImage; // 이미지 객체
CFLRect<double> flfLearnROI; // 학습 관심 영역
patternMatchMulti.SetLearnImage(fliLearnImage); // 학습 이미지 입력
patternMatchMulti.SetLearnROI(flfLearnROI); // 학습 관심 영역 입력
patternMatchMulti.Learn(L"학습 클래스 명칭 입력"); // 학습 진행

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

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

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

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

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

Pattern Match Multi는 Pattern Match와 달리 여러 학습 데이터를 동시에 학습하고, 한 번에 패턴 검사를 수행할 수 있습니다. 이를 통해 하나의 객체에 대해 여러 패턴을 검사할 수 있으며, 학습 데이터가 하나의 파일로 저장되어 관리가 용이하고 사용이 편리합니다.

1.1.3 학습 방법

  1. FLImaging® 개발 스튜디오을 실행합니다.
개발 스튜디오 실행 화면
개발 스튜디오 실행 화면
  1. Menu 검색창에 Pattern Match Multi-Model를 검색하거나 Advanced Functions에 Match 카테고리에 Pattern Match Multi-Model을 클릭합니다.
Pattern Match 알고리즘 검색
Pattern Match 알고리즘 검색
  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)을 클릭합니다.
학습 진행
학습 진행
학습 완료
학습 완료

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

CPatternMatchMulti patternMatchMulti; // 알고리즘 객체 선언

CFLImage fliLearnImage; // 이미지 객체 선언
fliLearnImage.Load(L"BallAlign.flif"); // 이미지 파일 로드
patternMatchMulti.SetLearnImage(fliLearnImage); // 학습 이미지 입력

CFLRect<double> flfLearnROI(768.384374, 835.351630, 858.873886, 926.797504, 0.000000); // 학습 영역 생성
patternMatchMulti.SetLearnROI(flfLearnROI); // 학습 영역 입력

patternMatchMulti.Learn(L"학습 클래스 명칭 입력"); // 학습 진행(명칭 입력)
CPatternMatchMulti patternMatchMulti = new CPatternMatchMulti(); // 알고리즘 객체 선언

CFLImage fliLearnImage = new CFLImage(); // 이미지 객체 선언
fliLearnImage.Load("BallAlign.flif"); // 이미지 파일 로드
patternMatchMulti.SetLearnImage(ref fliLearnImage); // 학습 이미지 입력

CFLRect<double> flfLearnROI = new CFLRect<double>(768.384374, 835.351630, 858.873886, 926.797504, 0.000000); // 학습 영역 생성
patternMatchMulti.SetLearnROI(flfLearnROI); // 학습 영역 입력

patternMatchMulti.Learn("학습 클래스 명칭 입력"); // 학습 진행(명칭 입력)
patternMatchMulti = CPatternMatchMulti() # 알고리즘 객체 선언

fliLearnImage = CFLImage() # 이미지 객체 선언
fliLearnImage.Load("BallAlign.flif") # 이미지 파일 로드
patternMatchMulti.SetLearnImage(fliLearnImage) # 학습 이미지 입력

flfLearnROI = CFLRect[Double](768.384374, 835.351630, 858.873886, 926.797504, 0.000000) # 학습 영역 생성
patternMatchMulti.SetLearnROI(flfLearnROI) # 학습 영역 입력

patternMatchMulti.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*: 이미지에서 탐색할 패턴의 최대 개수를 설정합니다.
Accuracy*: 패턴 매칭의 정밀도를 설정합니다.
Interpolation*: 탐색 시 이미지 보간 방식을 설정합니다.
Contrast Option*: 탐색할 이미지 타입을 설정합니다.
Search Accuracy*: 탐색 속도 값을 설정합니다.

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

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

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

CFLImage fliSourceImage; // 이미지 객체 선언
fliSourceImage.Load(L"Find.flif"); // 이미지 파일 로드

patternMatchMulti.SetSourceImage(fliSourceImage); // 검사 이미지 입력
patternMatchMulti.SetMinimumDetectionScore(0.700000); // 최소 스코어 설정
patternMatchMulti.SetMaxObjectTotal(30); // 검출학 객체수 출력

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

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

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

CFLImage fliSourceImage = new CFLImage(); // 이미지 객체 선언
fliSourceImage.Load("Find.flif"); // 이미지 파일 로드

patternMatchMulti.SetSourceImage(ref fliSourceImage); // 검사 이미지 입력
patternMatchMulti.SetMinimumDetectionScore(0.700000); // 최소 스코어 설정
patternMatchMulti.SetMaxObjectTotal(30); // 검출학 객체수 출력

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

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

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

fliSourceImage = CFLImage() # 이미지 객체 선언
fliSourceImage.Load("Find.flif") # 이미지 파일 로드

patternMatchMulti.SetSourceImage(fliSourceImage) # 검사 이미지 입력
patternMatchMulti.SetMinimumDetectionScore(0.700000) # 최소 스코어 설정
patternMatchMulti.SetMaxObjectTotal(30) # 검출학 객체수 출력

patternMatchMulti.Execute() # 검사 동작

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

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

1.1.5 학습 동작 함수

1.1.6 검사 동작 함수

1.1.7 동작 결과 취득 함수

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

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

1.1.8.1 Save 동작 설명

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

멤버함수 파라미터 설 명
Save const Base::CFLString strFilePath IN 학습 파일 경로
CPatternMatchMulti patternMatchMulti; // 알고리즘 객체

// 패턴 학습
CFLImage fliLearnImage; // 이미지 객체
CFLRect<double> flfLearnROI; // 학습 관심 영역
patternMatchMulti.SetLearnImage(fliLearnImage); // 학습 이미지 입력
patternMatchMulti.SetLearnROI(flfLearnROI); // 학습 관심 영역 입력
patternMatchMulti.Learn(L"학습 클래스 명칭 입력"); // 학습 진행

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

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

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

// 패턴 학습
fliLearnImage = CFLImage() # 이미지 객체
flfLearnROI = CFLRect[Double]() # 학습 관심 영역
patternMatchMulti.SetLearnImage(fliLearnImage) # 학습 이미지 입력
patternMatchMulti.SetLearnROI(flfLearnROI) # 학습 관심 영역 입력
patternMatchMulti.Learn("학습 클래스 명칭 입력") # 학습 진행

// 학습 파일 Save 진행
patternMatchMulti.Save("파일 경로 입력") # 파일 포멧은 .flmm

1.1.8.2 Load 동작 설명

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

멤버함수 파라미터 설 명
Load const Base::CFLString strFilePath IN 학습 파일 경로
CPatternMatchMulti patternMatchMulti; // 알고리즘 객체

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

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

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

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

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

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