Matrox Imaging Library(MIL) 기초 – 2


Mil 과 Mil Lite, Active Mil 과의 차이점


MIL-LITE 의 경우는 Matrox Frame Grabber 설치를 위한 Driver를 제공하며 기본적인 Frame Grabber 기능 즉, 영상획득, Display, 영상 Load, 저장이 가능한 Module들로 구성되어 있습니다.


주로 영상을 획득하여 Image 확인 및 이에 대한 저장을 위해 많이 사용되며 Image data를 직접 Access하여 독자적인 Processing처리 및 알고리즘을 적용할 수 있습니다.


MIL의 경우는 MIl-Lite에서 저공하는 기능을 포함하며 영상 처리를 위해 사용되는 알고리즘이 쉽게 사용할 수 있는 함수로 구현되어 있습니다.


즉, Image Processing, Pattern matching, OCR, blob, Measurement등의 기능을 함수로써 제공하므로 누구나 쉽게 사용하실 수 있도록 구성되어 있습니다.


MIL은 우리가 Visual C++ 환경에서 c language를 사용하여 programming 할 수 있도록 Library가 구성되어 있습니다.


Active MIL은 Active X를 사용하는 것으로써 Visual Basic과 Visual C++환경에서 개발이 가능하며 mil에서 사용하는 module들이 control들로 구성되어 있습니다.


즉 MIL에서는 사용하기 위한 module들에 대한 선언 및 초기화 작업에 대한 작업을 coding을 통해 설정을 해주는 반면에 Active MIL의 경우는 Active X control로 모든 module들이 구성 되어 있어 control을 Form 및 Resource에서 원하는 control을 선택하고 여기에 대한 초기화를 속성 창을 통해 설정을 합니다.


지원하는 기능은 동일하며 다만 사용하는 함수의 표현방식이 개발환경에 따라 다릅니다.



S/W License 정책 및 Maintenance


License의 경우는 MIL-Lite의 경우는 구매하시면 한 법인 내에서 1copy free로 사용가능합니다. 그러나 MIl의 경우는 1copy당 각각의 license가 있습니다. Hardware Lock key가 있어야만 사용이 가능 합니다. 따라서 2개 이상 사용시는 Hardware


Lock key를 추가로 구매하셔야 합니다.


Maintenance의 경우는 구매 후 1년 이내이면 Minor version upgrade시 무상 upgrade가 가능합니다. 그러나 Major version upgrade 및 구매 후 1년 이상이 지나신 경우는


Maintenance 비용을 지불하시면 upgrade가 가능합니다.



Mil Uninstall이 잘 되지 않을 경우


win2K 환경에서는 레지스트리 관리에 의해 MIL은 자체적인 Uninstall후에도 MIL이 제대로 제거되지 않는 경우가 있습니다.


또한 불가피하게 MIL을 다시 설치하게 될 경우 Uninstall 과정을 거친 후 다시 설치를 하게 되는데 설치가 제대로 되지 않는 경우가 있습니다.


이럴 경우에는 다음과 같이 setting을 하시면 됩니다.


1. Registry 편집기를 실행시킨다.


2. HKEY_LOCAL_MACHINE\SOFTWARE\Matrox의 폴더를 삭제 단, Matrox Desktop 제외


3. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MtxDma0의 폴더를 삭제


4. ControlSet003, ControlSet004, Current ControlSet 각각의 폴더 아래에 있는 MtxDma0도 모두 삭제


5. Boot.ini File 확인 사항Uninstall후 Boot.ini 파일 안에 메모리 관련 수치가 삭제되었는지 확인


C:\WINNT 폴더에 Boot.ini 파일의 내용 중 메모리 관련 내용을 삭제합니다.


Boot.ini File 내용의 일부분


[Operating systems]


multi(0)disk(0)rdisk(0)partition(1)\WINNT=”Microsoft


Windows 2000 Professional(Memory :


NT=228MB, MIL=20.0MB)(Memory : NT=148MB,


MIL=100.0MB)” /MAXMEM=148 /MAXMEM=248 /fastdetect


6. 재부팅



Mil을 설치 했는데 보드가 제대로 인식이 되지 않는 경우


MIL을 설치한 후 장치관리자에서 새로운 장치가 올바르게 설치되었는지 여부를 확인할 수 있습니다. Board를 제대로 인식하지 않는 경우는 다음과 같습니다.


1. 적절한 드라이버가 설치되지 않아 노란 물음표기 표시되어 있는 경우


2. Frame Grabber Adapter가 잘못 명기되어 있는 경우


예를 들어 Meteor2/4 또는 Meteor MC를 설치했는데 인식되는 board는 MeteorII-digital Frame Grabber 일 경우 그 반대의 경우 MeteorII-digital을 설치했는데 MeteorII라고 인식되는 경우


3. Intellicam에서 System이 Device0로 인식되지 않는 경우


1~3번의 경우는 장치관리자에서 드라이버 업데이트를 통해 적절한 드라이버를 설치하도록 설정, 재부팅 합니다. 그런 후에도 board가 잡히지 않는다면 IRQ를 setting이 어떻게 되어있는지 확인하시고 IRQ의 설정을 변경한 후 check를 합니다.



Intellicam을 잘 활용하는 방법


Intellicam은 Matrox에서 제공하는 하나의 Application Program으로 MIL과 MIL-Lite 모두에 포함되어 있는 program 입니다.


이 Application program은


1. Board가 제대로 인식되는지에 대한 확인


2. 사용하는 camera에 대한 적절한 dcf 제작및 편집


-> 대부분 Matrox에서 제공하며 sync mode 및 exposure time을 원하는 형태로 설정하는 것을 이 Application program을 통해 편집 가능


3. 제공되는 또는 제작 편집을 한 dcf가 camera와의 interfacing을 통해 영상이 제대로 획득 되는지를 원하는 결과가 나타나는 지 렌즈 및 빛의 밝기 등이 적절하게 선택되었는지 확인 할 수 있습니다.


또한 dcf의 편집을 통해 다양한 기능을 수행할 수 있으며, 간단한 Digitizer control을 할 수 있습니다.


원하는 영상이 획득된다면 이에 해당하는 dcf를 사용하여 program을 작성하시면 됩니다.



Matrox에서 제공 하는 예제를 보는 방법


Visual Studio 6.0 환경에서 Source를 불러와서 직접workspace를 생성할 때


예제는 Active MIL과 MIL 예제가 제공되고 있습니다.


예제에 대한 전반적인 기능에 대해 살펴보기 위해서는 시작/프로그램/Matrox


Imaging/Active MIL(MIL)/Example 을 클릭하시면 됩니다.


Active MIL의 경우는 바로 예제를 Simulation할 수 있도록 지원되는 형태로 이루어져있습니다. 따라서 원하는 Program에 대한 결과를 볼 수 있습니다.또한 오른쪽 하단에 Edit이라고 나타나 있는 Button을 click할 경우 visual Basic에서 구현된 code 및 form을 바로 볼 수 있습니다.


MIL의 경우는 각 예제에 대해 각각 선택을 할 수 있으며 이것을 선택하셔서 결과를 확인할 수 있습니다.


Code는 C:/program files/Matrox Imaging/MIL/examples 에서 원하시는 code를 살펴볼


수 있습니다.


물론 Active MIL도 위와 같은 방법으로 볼 수 있으며 Visual C++ 환경에서 coding 된 program도 볼 수 있습니다



Mil workspace 생성을 위한 setting


MIL을 이용한 program을 실행하기 위해서는


1. Tool/option을 선택하셔서 Directories Tab에서 Library와 include File에 Matrox의 Include와 Library를 설정해주십시오.


2. 그런 후 complie을 하시면 workspace가 생성이 되면서 error가 여러개 발생합니다.


이 error의 경우는 각 module에 대한 library가 link되지 않아서 발생하는 error이므로 다음과 같은 설정을 합니다.


– project/setting tab의 link의 program에서 사용되는 library module을 삽입해 주시면 됩니다.


예를 들면 mblob.c를 사용할 경우 기본적으로 mil.lib와 milblob.lib, milim.lib의 library를 첨가해주시면 됩니다.


3. 다시 Complie 합니다.



Mil (or Mil lite) 소스의 기본구조


MIL(Matrox Imaging Library)은 Matrox에서 나오는 Frame 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 */


MilSystem,


/* Frame Grabber의 ID */


MilDisplay,


/* Display를 위한 ID */


MilDigitizer,


/* Digitizer 곧 Camera를 위한 ID */


MilImage;


/* Image Buffer를 위한 ID */


/* 응용프로그램에서 각 ID들을 기본적인 설정으로 할당합니다. */


MappAllocDefault(M_SETUP, &MilApplication, &MilSystem,


&MilDisplay, &MilDigitizer, &MilImage);


/* Monitor에 MilImage의 내용을 Display하기 위한 설정을 합니다. */


MdispSelect(MilDisplay, MilImage);


/* Camera에서 Grab하여 MilImage에 저장합니다. */


MdigGrab(MilDigitizer, MilImage);


/* printf문 */


printf(“An image has been grabbed.\n”);


printf(“Press to end.\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


해제의 경우는


MdigFree, MdispFree, MbufFree -> MsysFree -> MappAlloc


의 순서입니다



Visual C++에서 Mil 사용 팁!!


1. MIL help 이용방법


– MIL을 설치하신 후에 메뉴>Tools>Customize에 들어가셔서 Add-ins and Macro Files 탭을 보시면 다음과 같은 항목이 추가되는 걸 확인하실 수 있습니다.


. Matrox ActiveMIL VC++ Add-In


. Matrox MIL VC++ Add-In


여기서 Matrox MIL VC++ Add-In을 추가하시면 Visual C++을 사용하시다가 MIL함수에 대한 도움말을 보실 때, 함수 명위에 커서를 위치시키고, Ctrl+F1을 누르시면 바로 MIL help를 보실 수 있습니다.


2. LINK : fatal error LNK1104: cannot open file “mil.lib”


(or error LNK2001: unresolved external symbol)


프로그래밍을 조금만 해보신 분이라면 아시겠지만, 위 에러는 컴파일할 때 mil library를 못찾은 까닭입니다. 이 때는 메뉴>Tools>Options에서 Directories탭에 가셔서 library files의 디렉토리로 MIL library파일이 있는 경로를 추가해주시면 됩니다.


일반적인 경우 경로는 다음과 같습니다.


C:\PROGRAM FILES\MATROX IMAGING\MIL\LIBRARY\WINNT\MSC\DLL


Include file도 똑같이 해주시면 되고, 경로는 다음과 같습니다.


C:\PROGRAM FILES\MATROX IMAGING\MIL\INCLUDE


(주의)이미 만들어진 소스를 가지고 작업을 하시게 될 경우에도 위의 에러를 보시는 경우가 있을 것입니다. 이것은 기존 workspace에 설정돼있는 lib화일의 경로와 현재 사용하시는 컴퓨터에서의 경로가 다르기 때문인데, 이때는 위의 directories설정을 제대로 해주셔도 위와 같은 link error가 발생합니다.


이때는 workspace view에 있는 *.lib화일을 삭제하시고 다시 컴파일하시면 됩니다.



Milimage 를 파일로 저장하거나 불러오는 방법


MIL에서 기본으로 사용하는 Image Format은 *.mim형태의 tiff형식의 화일입니다.


따라서 MbufLoad와 MbufSave를 다음과 같이 사용하시면, mim화일로 저장 또는 불러오기가 가능합니다.


MbufLoad(“load.mim”, MilImageLoaded);


MbufSave(“save.mim”, MilImageSaved);


그러나 일반적으로 사용하는 포맷인 jpeg이나 tiff, raw등의 이미지화일포맷은 다음의 함수를 사용하여 저장 또는 불러오기가 가능합니다.


MbufImport(“sample.jpg”, M_JPEG_LOSSY, M_RESTORE,


MilSystem, &MilImage);


MbufExport(“sample.tif”, M_TIFF, MilImage);


그리고 Image의 sequence를 avi파일로도 저장이 가능한데, 이때는 MbufImportSequence, MbufExportSequence함수를 이용하시면 됩니다.



Mil을 이용한 프로세싱 시간 측정


프로그램을 직접 작성하시다 보면 각 부분들의 성능을 측정하고, 디버깅을 위해 Timer가 필요한 경우가 많습니다. 이럴 경우 MIL, MIL-lite에서 제공하는 MappTimer를 사용하시면 됩니다. 사용방법은 매우 간단합니다.


/* Return되는 시간값의 단위는 sec(초)이고, 따라서 보통


Time*1000(ms)로 사용합니다. */


double Time;


MappTimer(M_TIMER_RESET, M_NULL);


/* 이곳에 시간측정대상이 되는 프로세스가 들어갑니다.*/


MappTimer(M_TIMER_READ, &Time);



Mil을 이용한 프로세싱 시간 측정


Matrox 프레임그래버의 드라이버는 따로 화일로 주어지지는 않습니다. MIL이나 Mil-lite를 설치하실 때 깔게 되구요. 창이 설치도중에 뜨게 되는데 이때 선택하신 보드의 드라이버들이 깔리게 됩니다.


MIL이나 Mil-lite의 설치가 끝난 후 프레임그래버가 자동으로 잡히지 않는 경우에는 장치관리자를 확인하여 주시기 바랍니다. 제대로 잡혔다면 Matrox Imaging Adapter라는 폴더가 생기고 그 안에 프레임그래버정도가 들어있게 됩니다.


느낌표나 x표가 있을 경우 제대로 인식이 안된 것입니다. 이때는 등록정보의 드라이버탭의 드라이버 업데이트를 해주십시요.


위와 같이 하시면, 창이 새로 뜨게 되는데 여기서 밑의 항목을 선택합니다.


그러시면, 설치하신 프레임그래버 드라이버중 사용가능한 드라이버의 목록이나 설치할 준비가 되었다는 메시지가 뜨게 됩니다.


(참고로 Meteor2/Multi-Channel보드도 MeteorII라고만 표시됩니다.)


그리고 나시면 Intellicam 에서 Device 0 라고 나온것을 확인하실 수 있습니다. 

Dr.kchris

Hello, I'm Dr.kchris, a neuroscience researcher. I love studying and trying new things and also love challenging myself. Have a great day! :)

This Post Has 3 Comments

  1. 이성안

    안녕하세요. 님이 올려주신 글이 많은 참고가 되었습니다. 감사합니다

    헌데 그럼에도 불구하고 아직 프레임 그래버 드라이버가 잡히지 않아 질문을 좀 드리려고 합니다.
    제가 가지고 있는 보드는 meteor2 mc/4 보드입니다. 프로그램으로는 MIL LITE 7.5 버젼을 가지고 있는데 이를 설치 하려고, (os는 window xp service pack3입니다.)

    1. 이미지 보드를 연결
    2. Visual C++ 설치
    3. MIL 설치 ( driver Meteor 2 / Multi-Channel 선택, VGA 선택)
    4. 드라이버 수동 설치

    위와 같은 과정으로 진행하였으나, 자꾸 mtxdma 시스템 파일을 먼저 설치 않았다고 3번과정 마지막 단계에서 에러가 나면서 드라이버가 잡시질 않는 것이 지금 제 현상입니다.
    메트록스 보드가 컴퓨터의 마더보드에 영향이 많이 미친다고 들었는데 제컴퓨터가 아에 안되는 것인지 그것조차 모르니 답답할 다름입니다. (제 컴퓨터 마더 보드는 NVIDIA nForce 430/410 에 칩셋 GeForce 6100 입니다.)

    혹시 이러한 문제나 설치 방법에대해 조금이라도 조언얻을 수 있을까해서 글을 남깁니다.

    1. kchris

      안녕하세요. 답이 늦어서 죄송합니다.

      저는 ASUS nForce4(nVidia) 칩셋을 사용하는 보드(2003년형)에 morphis를 사용중입니다. OS는 xp를 사용하고 있네요.

      제가 설치한 순서는..
      1. 보드연결,
      2. MIL 9.0 LITE 설치(드라이버도 같이 설정)
      3. Visual Studio 설치.

      이렇게 하였습니다.
      아무런 문제는 없었고.. 성안님과 저의 차이는 보드와 MIL 버전 차이밖에 없는것 같네요.

      7.5에서 메테오 드라이버를 제대로 지원을 못해준다거나..
      또는 ftp://ftp.soft-imaging.de/pub/download/Support/db/MatroxMeteorUninstall_ENG.pdf 이 링크를 참조해보셔도 좋을것 같습니다.

      좋은 하루 되세요. 🙂

  2. battlepms

    좋은 글 남겨주셔서 감사합니다.
    많은 도움이 되었습니다.
    잘보고 갑니다!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.