Mil과 Mil Lite, Active Mil 과의 차이점.??
Mil - Lite의 경우는 Matrox Frame Grabber 설치를 위한 Driver를 제공하며 기본적인 Frame Grabber기능 즉 영상획득
디스플레이 , 영상 로드, 저장이 가능한 모듈들로 구성되어 있습니다.
주로 영상을 획득하여 이미지 확인 및 이에 대한 저장을 위해 많이 사용되며, 이미지 데이타를 직접 접근하여
독자적인 프로세싱처리 및 알고리즘을 적용할 수 있습니다.
MIL의 경우에는 MIL-lite에서 제공하는 기능을 포함하며 영상처리를 위해 사용되는 알고리즘이 쉽게 사용할 수 있는 함수로
구현되어 있습니다.
즉 이미지 프로세싱 패턴 매칭 OCR blob Measurement등의 기능을 함수로써 제공하므로 누구나 쉽게 사용하실 수
있도록 구성.
Mil은 우리가 Visual C++ 환경에서 c언어를 사용하여 프로그래밍 할 수 있도록 라이브러리가 구성되어 있습니다.
Active Mil은 Active X 사용하는 것으로써 Visual basic과 visual c++환경에서 개발이 가능하며 mil에서 사요하는
모듈들로 컨트롤이 구성되어 있습니다.
즉 MIL에서는 사용하기 위한 모듈들에 대한 선언 및 초기화 작업에 대한 작업을 config을 통해 설정을 해 주는 반면에
active mil의 경우는 active x control로 모든 모듈들이 구성되어 있어 컨트롤을 form 및 리소스에서 원하는 컨트롤을 선택하고 여기에 대한 초기화를 속성창을 통해 설정을 합니다.
지원하는 기능은 동일하며 다만 사용하는 함수의 표현방식이 개발환경에 따라 다릅니다.
■ Mil workspace 생성을 위한 세팅하는 방법
MIL을 이용한 프로그램을 실행하기 위해서는
1. Tool / option 에서 Directories tab에서 라이브러리, 인클루드 파일에 매트록스에 폴더를 넣어준다.
2. 그런후 컴파일을 하면 workspace 가 생성되면서, 에러가 발생한다.
이 에러경우는 각 모듈에 대한 라이브러리가 링크되지 않아서 발생하는 에러이므로 다음과 같은 설정을 한다.
- project / setting tab의 link의 프로그램에서 사용되는 library modules을 삽입해 주시면 됩니다.
- 예를들면 mblob.c 를 사용할 경우 기본적으로 mil.lib, milblob.lib, millimlib 의 라이브러리 첨가해주시면 됩니다.
3. 그리고 다시 컴파일을 한다.
■ MIL 기본 소스구조.
Mil은 매트록스에서 나오는 프레임 Grabber를 사용하기 위해서 필요한 일종의 라이브러리.
Mil 과 Mil-Lite의 두 종류로 나뉘어 있으며, Mil은 Mil-Lite에 들어있지 않은 Image-Processing관련 함수들이
포함되어 있습니다.
Mil 처음하시는 분들을 위해서 간단한 Grab예제로 설명
/* Mil함수들이 정의되어 있는 함수로써 include해야 됩니다. */
#include< mil.h >
#include< stdio.h >
void main(void)
{
/* Mil에서 각 개체들을 다루는 data type으로서 아래와 같은 항목들을 지정합니다. */
MIL_ID MilApplication; // 응용프로그램 ID
MIL_ID MilSystem; // Frame Grabber의 ID
MIL_ID Mildisplay; // 디스플레이를 위한 ID
MIL_ID MilDigitizer; // digitizer를 위한 ID
MIL_ID MilImage; // Image buffer를 위한 ID
/* 응용프로그램에서 각각 ID들을 기본적인 설정으로 할당합니다. */
MappAllocDefault( M_SETUP, &MilApplication, & MilSystem, &MilDisplay, &MilDigitizer, &MilImage );
/* 모니터에 MilImage의 내용을 디스플레이 하기 위한 설정을 한다. */
MdispSelect(MilDigitizer, MilImage);
/* 카메라에서 Grb하여 MilImage에 저장합니다. */
MdigGrab( MilDigitizer, MilImage );
printf("An Image has been Grabbed\n");
getchar();
/* 처음에 할당한 ID들을 해제 합니다. */
MappFreeDefault( MilApplication, MilSystem, MilDisplay, MilDigitizer, MilImage );
}
위에서 각 ID들을 할당하고 해제시켜주는 것은 모든 응용프로그램에서 동일하다.
다만 각 경우에 따라 각 ID들을 따로 할당시키고 각각해제할 수 있습니다.
각각의 MIL_ID를 할당 및 해제하는 함수는 다음과 같다.
MilApplication - MappAlloc , MappFree
MilSystem - MsysAlloc, MsysFree
MilDisplay - MdispAlloc, MdispFree
MilDigitizer - MdigAlloc, MdigFree
MilImage - MbufAlloc2d , MbufAllocColor, MbufFree, etc....
여기서 주의 할 점은 할당 해제시 순서이다.
할당시에는
MappAlloc -> MsysAlloc -> MdigAlloc -> MdispAlloc - > MbufAlloc
해제시에는
MbuffFree -> MdispFree -> MdigFree -> MsysFree -> MappFree
■ MilImage를 파일로 저장하거나 불러오는 방법
MIL에서 기본으로 사용하는 Image Format은 *.mim형태의 tiff형식의 파일입니다.
따라서 MbufLoad와 MbufSave를 다음과 같이 사용하시면 mim파일로 저장 또는 불러오기가 가능.
MbufLoad( "load.mim", MilImageLoaded );
MbufSave("save.mim" MilImagfeSaved);
그러나 일반적으로 사용하는 포맺인 jpeg나 tiff, raw등의 이미지 파일 포맺은 다음의 함수를 사용하여 저장 불러오기가능.
MbufImport( "sample.jpg", M_JPEG_LOSY, M_RESTORE, MilSystem, &MilImage);
MbufExport( "sample.tif", M_TIFF, MilImage );
그리고 Image의 sequence를 avi파일로도 저장이 가능한다. 이때는
MbufImprtSequence, MbufExportSequence 함수를 이용하면 된다.
■ MIL을 이용한 프로세싱 시간 측정.
프로그램을 직접 작성하다 보면 각 부분들은 성능을 측정하고, 디버깅을 위해 Timer가 필요한 경우가 많다.
이럴경우 Mil에서 제공하는 MappTimer를 사용하면 된다.,
/* Return되는 시간값의 단위는 sec(초) 이고 따라서 보통 Time * 1000(ms)로 사용합니다. */
double Time;
MappTimer(M_TIMER_RESET, M_NULL);
/*이곳에 시간측정 대상이 되는 프로세스가 들어간다.*/
MappTimer(M_TIMER_READ, &Time);
'Programming' 카테고리의 다른 글
[SI 단위] 킬로,메가,기가,테라,베타,엑사, 나노,피코,펨토,아토,젭토 욕토 (0) | 2017.04.07 |
---|---|
CFileDialog 정리 (0) | 2017.03.24 |
Mil 기초적 파악사항 - 1 (0) | 2017.02.20 |
MFC 모달리스 창 존재여부 판단 조건식 (0) | 2016.12.13 |
php 크롤링, 파싱할 때 좋은 스누피 클래스 (0) | 2016.10.15 |