OFFICE/프로그램

Mil 기초적 파악사항 - 2

gandus 2011. 7. 13. 11:32
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);