반응형

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);

+ Recent posts