All posts tagged “Matrox

comment 0

Accessing a MIL buffer directly

If needed, a MIL buffer’s contents can be accessed directly. For instance, if you want to calculate the average value of the pixels of your image, you could create a custom algorithm. The algorithm could be applied directly to the buffer without having to copy the contents of the MIL buffer into a user-allocated array (MbufAlloc…()) by using MbufGet() and MbufPut(). To do so would be more efficient and might improve the performance of the custom algorithm.

In order to access the MIL buffer directly, the buffer’s address and pitch must be known. Once you know this, you will be able to access them directly for optimum performance.


사용자 삽입 이미지

The address of a parent or child buffer can be returned using MbufInquire(). Selecting M_HOST_ADDRESS will return a logical address, while M_PHYSICAL_ADDRESS will return a physical address. In either case, the first address of the buffer you are specifying will be the top left-most pixel in the image. Knowing the pitch and the depth of the buffer will tell you the address of the following row.


The pitch of a buffer is the number of units between the beginnings of any two adjacent lines of the buffer’s data and can be measured in pixels or bytes. Note that in some instances, the pitch in bytes will be more accurate than in pixels. If the last pixel falls outside of a 32-bit boundary (required by Windows), the start of the next row will be located at the beginning of the next 32-bit boundary; this process is called internal padding. When measuring the pitch in pixels, the padding can be counted as “extra” pixels, depending on the depth of the pixels. This will result in an inaccurate pitch.

comment 0

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함수를 이용하시
면 됩니다.

comments 2

Visual Studio에서 Mil사용을 위한 tip

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화일을 삭제하시고 다시
컴파일하시면 됩니다.

comment 0

Matrox Imaging Library(MIL) – 시스템구조

 

2. MIL 소프트웨어 시스템 구조


 


2.1 MIL/MIL-Lite Modules


– Application , System , Buffer, Display, Digitizer, Graphics context, Threading으로 구성되어 있습니다. MFC에서 new delete가 존재하듯이 각각의 모듈들은 생성 및 소멸 되어야 합니다.


 


각 모듈에 대해서 간단하게 알아봅시다. ^^


 


2.1.1 Application 모듈.


– Mapp() 함수들은 Application환경을 제어합니다.


-> 리소스(Resources) 초기화, 에러 메시지 및 사용자 정의 함수들을 제어할 수 있다.


)  MappAlloc()


 


2.1.2 System 모듈


시스템 모듈의 모든 함수는 Msys()로 시작합니다.(MsysAlloc, MsysControl, MsysFree, MsysGetHookInfo, MsysHookFunction, MsysInquire).


예를들어, MsysAlloc() 함수들은 통신채널과 하드웨어 리소스들을 개방하며, 데이터전송 수행, 시리얼 인터페이스(UARTs)를 제어합니다.


 


2.1.3 Buffer 모듈


– Mbuf()는 버퍼를 설정하기 위한 함수입니다.


예를들어 흑백 및 컬러데이터를 저장하기 위해서는 용도에 맞는 버퍼를 할당 해야 한다.


) 흑백: MbufAlloc2d() , 컬러: MbufAllocColor()


 


2.1.4 Display 모듈


– Mdisp() 함수는 버퍼안에 있는 데이터를 어떤 Display에 보여줄 것인지를 정의 할수있습니다.


버퍼를 선택할 수 있도록 하는 함수는 MdispSelect() 등이 있다.


 


2.1.5 Digitizer 모듈


– Mdig() 함수는 Image Video를 제어합니다. 이 함수는 DCF(Digitizer Configuration Format)이 필요합니다.


설정후에는 MdigGrab()함수를 이용해 Grab Image 버퍼에 저장할 수 있습니다.


 


 


2.1.6 MIL Graphic Context


– Mgra() 함수는 MFC에서 DC와 비슷하다고 생각하시면 됩니다. ^^


) MgraRect(), MgraArc(), MgraRectFill(), MgraText(), MgraArcFill(), MgraLines(), MgraLine(), MgraDot(), MgraDots(), MgraFill(), MgraClear().


 


2.1.7 MIL Architecture hierarchy


– Alloc() Free()는 순서대로 하시면 됩니다.


Alloc Application-> System-> Digitizer->Buffer->Display


Free Alloc과는 반대로 진행하시면 됩니다. ^^


 


(최소한, Application, System, Buffer는 할당을 해주셔야 한다는 점은 유의하셔야 합니다.)


 


모든 모듈에는 M_ 으로 시작합니다. MIL에서 사용하는 변수는 MIL_ID 형식으로 사용할 수있습니다.(MIL_ID == long)


 


2.1.8 MIL 에서 Default 사용법


 


MappAllocDefault() 함수는 MilConfig에 설정되어있는, System, Display, Digitizer, Buffer를 이용하여 구성합니다. (변경을 위해서는 MilConfig툴에서 변경하셔야합니다.)


 


) MappAllocDefault(ApplicationID, SystemID, DisplayID, DigId, ImageBufId)

comments 3

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 라고 나온것을 확인하실 수 있습니다.