gray_dilation_shape(m_hoSource, &ImageMax, 1.5, 1.5, "rectangle");              // Gray Level 확장

threshold(ImageMax, &Region, 140, 255);                                         // Threshold 찾기

connection(Region, &ConnectedRegions);                                          // 지정영역연결

HTuple lStart[2], lLast[2];                                                    // 영역지정값    

// 찾을영역지정

lStart[0] = (m_htImgWidth  / 2) - (lTipRgnWidth  * 0.5 * PIXEL_UNIT_ANTI);      // 좌상단 위치 지정 (가로)

lStart[1] = (m_htImgHeight / 2) - (lTipRgnHeight * 0.5 * PIXEL_UNIT_ANTI);      // 좌상단 위치 지정 (세로)

lLast[0]  = (m_htImgWidth  / 2) + (lTipRgnWidth  * 0.5 * PIXEL_UNIT_ANTI);      // 우하단 위치 지정 (가로)

lLast[1]  = (m_htImgHeight / 2) + (lTipRgnHeight * 0.5 * PIXEL_UNIT_ANTI);      // 우하단 위치 지정 (세로)

// 중심을 기준으로 검사 영역 설정

clip_region(ConnectedRegions, &RegionClipped, lStart[1],lStart[0],lLast[1],lLast[0]);  

select_shape(ConnectedRegions, &SelectedRegions1, "width", "and",10, 55);       // 지정크기영역만찾기(너비)

select_shape(SelectedRegions1, &SelectedRegions2, "height", "and",10, 55);      // 지정크기영역만찾기(높이)

select_shape(SelectedRegions2, &RegionTrans, "area", "and",100, 2700);          // 지정크기영역만찾기(영역)

shape_trans(SelectedRegions, &RegionTrans, "rectangle1");                       // 영역을변경

 

// 이하 이부분은 동일함 어차피 한 개의 영역만 구하고 화면 표시하는 부분이므로..

count_obj(RegionTrans, &SelectNum);                                             // 구한 영역 개수 구하기

long nNum;

tuple_int(SelectNum, &nNum);                                                    // 구한 개수를 일반 상수로 변경

// 구한 개수가 하나일 경우에만 다음과 같이 처리 하나 이상일 경우 에러 처리

HTuple X,Y, HalfX, HalfY;

area_center(RegionTrans, &Area, &Row, &Column);                                 // 구한 영역 중심값 구하기

// 영역 계산부분

// 현재 구한 부분을 전체 길이의 절반으로 뺀값이 중심부터 떨어진 값임

X = Column - (m_htImgWidth * 0.5);                                              // 가로축의 부분 계산

Y = Row - (m_htImgHeight * 0.5);                                                // 세로축 부분 계산

tuple_int(X, &lWidth);                                                          // 구한 값을 일반 상수로 변경

tuple_int(Y, &lHeight);

// 구한 결과값을 픽셀당 유니트 크기로 계산하기

nResultX = lWidth  * PIXEL_UNIT;                                                // PIXEL_UNIT은 미리 정의함

nResultY = lHeight * PIXEL_UNIT;

set_color(m_htDisp, "red");                                                     // 표시색상

set_tposition(m_htDisp, 10, 10);//nZoomScale + 10, nZoomScale + 10);            // 텍스트 표시 위치 설정

write_string(m_htDisp, "X : " + nResultX + " Y : " + nResultY);                 // 결과값표시

// 구한 영역을 외곽선만 표시함

set_line_width(m_htDisp, 1);                                                    // 굵기선택

set_draw(m_htDisp, "margin");                                                   // 외곽만표시

set_color(m_htDisp, "blue");                                                   // 표시색상 변경

disp_obj(RegionTrans, m_htDisp);                                               // 영역그리기

* 십자 마크 중심에서 떨어진 값 구하기

gray_dilation_shape(m_hoSource, &ImageMax, 1.5, 1.5, "rectangle");              // Gray Level 확장

threshold(ImageMax, &Region, 200, 255);                                         // Threshold 찾기

connection(Region, &ConnectedRegions);                                          // 지정영역연결

select_shape(ConnectedRegions, &SelectedRegions1, "width", "and",300, 400);     // 지정크기영역만찾기(너비)

select_shape(SelectedRegions1, &SelectedRegions2, "height", "and",300, 400);    // 지정크기영역만찾기(높이)

select_shape(SelectedRegions2, &RegionTrans, "area", "and",50000, 100000);      // 지정크기영역만찾기(영역)

shape_trans(SelectedRegions, &RegionTrans, "rectangle1");                       // 영역을변경

 

// 이하 이부분은 동일함 어차피 한 개의 영역만 구하고 화면 표시하는 부분이므로..

count_obj(RegionTrans, &SelectNum);                                             // 구한 영역 개수 구하기

long nNum;

tuple_int(SelectNum, &nNum);                                                    // 구한 개수를 일반 상수로 변경

// 구한 개수가 하나일 경우에만 다음과 같이 처리 하나 이상일 경우 에러 처리

HTuple X,Y, HalfX, HalfY;

area_center(RegionTrans, &Area, &Row, &Column);                                 // 구한 영역 중심값 구하기

// 영역 계산부분

// 현재 구한 부분을 전체 길이의 절반으로 뺀값이 중심부터 떨어진 값임

X = Column - (m_htImgWidth * 0.5);                                              // 가로축의 부분 계산

Y = Row - (m_htImgHeight * 0.5);                                                // 세로축 부분 계산

tuple_int(X, &lWidth);                                                          // 구한 값을 일반 상수로 변경

tuple_int(Y, &lHeight);

// 구한 결과값을 픽셀당 유니트 크기로 계산하기

nResultX = lWidth  * PIXEL_UNIT;                                                // PIXEL_UNIT은 미리 정의함

nResultY = lHeight * PIXEL_UNIT;

set_color(m_htDisp, "red");                                                     // 표시색상

set_tposition(m_htDisp, 10, 10);//nZoomScale + 10, nZoomScale + 10);            // 텍스트 표시 위치 설정

write_string(m_htDisp, "X : " + nResultX + " Y : " + nResultY);                 // 결과값표시

// 구한 영역을 외곽선만 표시함

set_line_width(m_htDisp, 1);                                                    // 굵기선택

set_draw(m_htDisp, "margin");                                                   // 외곽만표시

set_color(m_htDisp, "blue");                                                   // 표시색상 변경

disp_obj(RegionTrans, m_htDisp);                                               // 영역그리기

* 사각형 마크 중심에서 떨어진 값 구하기

gray_dilation_shape(m_hoSource, &ImageMax, 1.5, 1.5, "rectangle");              // Gray Level 확장

threshold(ImageMax, &Region, 0, 75);                                            // Threshold 찾기

connection(Region, &ConnectedRegions);                                          // 지정영역연결

select_shape(ConnectedRegions, &SelectedRegions1, "width", "and",140, 205);     // 지정크기영역만찾기(너비)

select_shape(SelectedRegions1, &SelectedRegions2, "height", "and",140, 205);    // 지정크기영역만찾기(높이)

select_shape(SelectedRegions2, &RegionTrans, "area", "and",20000, 40000);       // 지정크기영역만찾기(영역)

 

// 이하 이부분은 동일함 어차피 한 개의 영역만 구하고 화면 표시하는 부분이므로..

count_obj(RegionTrans, &SelectNum);                                   

         // 구한 영역 개수 구하기

long nNum;

tuple_int(SelectNum, &nNum);                                                    // 구한 개수를 일반 상수로 변경

// 구한 개수가 하나일 경우에만 다음과 같이 처리 하나 이상일 경우 에러 처리

HTuple X,Y, HalfX, HalfY;

area_center(RegionTrans, &Area, &Row, &Column);                                 // 구한 영역 중심값 구하기

// 영역 계산부분

// 현재 구한 부분을 전체 길이의 절반으로 뺀값이 중심부터 떨어진 값임

X = Column - (m_htImgWidth * 0.5);                                              // 가로축의 부분 계산

Y = Row - (m_htImgHeight * 0.5);                                                // 세로축 부분 계산

tuple_int(X, &lWidth);                                                          // 구한 값을 일반 상수로 변경

tuple_int(Y, &lHeight);

// 구한 결과값을 픽셀당 유니트 크기로 계산하기

nResultX = lWidth  * PIXEL_UNIT;                                                // PIXEL_UNIT은 미리 정의함

nResultY = lHeight * PIXEL_UNIT;

set_color(m_htDisp, "red");                                                     // 표시색상

set_tposition(m_htDisp, 10, 10);//nZoomScale + 10, nZoomScale + 10);            // 텍스트 표시 위치 설정

write_string(m_htDisp, "X : " + nResultX + " Y : " + nResultY);                 // 결과값표시

// 구한 영역을 외곽선만 표시함

set_line_width(m_htDisp, 1);                                                    // 굵기선택

set_draw(m_htDisp, "margin");                                                   // 외곽만표시

set_color(m_htDisp, "blue");                                                   // 표시색상 변경

disp_obj(RegionTrans, m_htDisp);                                               // 영역그리기

* Frame Grabber 정의 및 열기

사용 함수 원형

open_framegrabber (Name, HorizontalResolution, VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn, Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn : AcqHandle )

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Name

이미지 인터페이스 명

File’

'Ginga++', 'TAG', 'TWAIN', .....

HorizontalResolution, VerticalResolution

원하는 이미지를 수집하는 해상도

1

1, 2, 4, 1600, 1280, 768, 640, 384, 320, 192, 160, -1

ImageWidth, ImageHeight

수집하는 이미지의 반환 크기

0

0, -1

StartRow, StartColumn

이미지 시작 위치

0

0, -1

Field

수집할 이미지 면적

‘default’

'first', 'second', 'next', 'interlaced', 'progressive'

BitsPerChannel

비트당 이미지 픽셀 수

-1

5, 8, 10, 12, 14, 16, -1

ColorSpace

이미지의 출력 색상 형식

‘default’

'gray', 'raw', 'rgb', 'yuv'

Generic

일반 매개 변수 특정 쿼리 사용시만

-1

 

ExternalTrigger

외부 트리거링 사용 여부

‘default’

'true', 'false', 'default'

CameraType

카메라 스펙

‘default’

'ntsc', 'pal', 'auto'

Device

이미지 수집 장치의 이름

-1

‘-1', '0', '1', '2', '3'

Port

이미지 수집 연결 포트 번호

-1

0,1,2,3,-1

LineIn

입력 라인(사용 될 경우만 사용)

-1

1, 2, 3, 4, -1

AcqHandle

그래버에 할당할 핸들 번호

 

 

 

사용 예시

// Select a suitable image acquisition interface name AcqName
info_framegrabber(AcqName,'port',Information,Values)
// Choose the port P and the input line L your camera is connected to
open_framegrabber(AcqName,1,1,0,0,0,0,'default',-1,'default',-1.0,
                  'default','default','default',P,L,AcqHandle)
grab_image(Image,AcqHandle) 
close_framegrabber(AcqHandle)

 


 

* Frame Grabber 닫기

사용 함수 원형

close_all_framegrabbers();         모든 Frame Grabber를 닫는다

close_framegrabber(Acq Handle);      지정 Frame Grabber를 닫는다

 

매개변수 설명

B/D 핸들 or 매개변수 없음

 

사용 예시

close_all_framegrabbers();        

close_framegrabber(m_htAcqHandle);

 

* 이미지 채널별 접근

사용 함수 원형

get_image_pointer1 (Image, Pointer, Type, Width, Height)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

입력 이미지

File’

'Ginga++', 'TAG', 'TWAIN', .....

Pointer

수집된 이미지 데이터 포인터

없음

 

Type

이미지 타입

없음

int1, int2, uint2, int4, byte, rea', direction, cyclic, complex,  vector_field

Width, Height 

수집된 이미지 크기

0

0, -1

 

사용 예시

Hobject  Bild;
char     typ[128];
long     width,height;
unsigned char *ptr;
 
read_image(&Bild,"fabrik");
get_image_pointer1(Bild,(long*)&ptr,typ,&width,&height);

 

* 이미지 불러오기 (Grabber B/D 이용)

사용 함수 원형

grab_image (Image, Acq Handle)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

입력 이미지 저장값

없음

 

Acq Handle

Grabber B/D Handle

없음

 

 

사용 예시

// Select a suitable image acquisition interface name AcqName

info_framegrabber(AcqName,'port',Information,Values);

// Choose the port P and the input line L your camera is connected to

open_framegrabber(AcqName,1,1,0,0,0,0,'default',-1,'default',-1.0,

                  'default','default','default',P,L,AcqHandle);

grab_image(Image,AcqHandle);

close_framegrabber(AcqHandle);

 


 

* 이미지 불러오기 (File 불러오기 이용)

사용 함수 원형

read_image (Image, Filename)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

입력 이미지

없음

 

Filename

불러올 이미지 명

fabrik

monkey, fabrik, mreut

 

사용 예시

/* Reading an image: */

  read_image(Image,'monkey');

 

/* Reading 3 images into an image array: */

  read_image(Images,['ic_0','ic_1','ic_2']);

 

/* Setting of search path for images on '/mnt/images' and '/home/images': */

  set_system('image_dir','/mnt/images:/home/images');

 

* 이미지 저장하기

사용 함수 원형

read_image (Image, Format , FillColor, Filename)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

저장할 이미지

없음

 

Format

저장 형식

tiff

tiff, bmp, jpeg, ima, jpeg 100, jpeg 80, jpeg 60, jpeg 40, jpeg 20, jp2, jp2 50, jp2 40, jp2 30, jp2 20, png, png best, png fastest, png none

FillColor

픽셀당 채울 그레이 값

0

-1, 0, 255, 0xff0000, 0xff00

Filename

저장할 파일명

 

 

 

사용 예시

write_image(m_hoSource, "bmp", 0, a_Path.GetBuffer(0));

 

 


 

* 이미지 표시 영역 설정하기

사용 함수 원형

set_part (Window Handle, Row1, Column1, Row2, Column2)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Window Handle

표시할 윈도우 핸들 값

 

Long type

Row1, Column1

이미지 좌 상단 위치

0

 

Row2, Column2

이미지 우 하단 위치

512

Row2 >= Row1,
Column2 >= Column1

 

사용 예시

get_system('width',,Width);

get_system('height',Height);

set_part(WindowHandle,0,0,Height-1,Width-1);

disp_image(Image,WindowHandle);

draw_rectangle1(WindowHandle:Row1,Column1,Row2,Column2);

set_part(WindowHandle,Row1,Column1,Row2,Column2);

disp_image(Image,WindowHandle);

 

 

* 이미지 표시하기

사용 함수 원형

disp_obj (Image, Window Handle)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

표시할 이미지

없음

 

Window Handle

표시할 윈도우 핸들값

없음

 

 

사용 예시

/* Output of a gray image: */

read_image(Image1,'affe');

disp_obj(Image1, WindowHandle);

threshold(Image, Region, 0, 128);

disp_obj(Region, WindowHandle);

 


 

* 이미지 회전하기

사용 함수 원형

rotate_image (Input Image, Rotate Image, Phi, Interpolation)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Input Image

회전할 원 이미지

없음

 

Rotate Image

회전된 이미지

없음

 

Phi

회전 각도

90

90,180,270

Interpolation

보간 방법

constant

None, constant, weighted

 

사용 예시

read_image(Image,'monkey');

disp_image(Image,WindowHandle);

rotate_image(Image, RotImage, 270, ‘constant’);

disp_image(RotImage,WindowHandle);

 

 

* 표시된 이미지 정리하기

사용 함수 원형

clear_window (Window Handle)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Window Handle

표시할 윈도우 핸들값

없음

 

 

사용 예시

clear_window(WindowHandle);

 

* 표시할 윈도우 열기

사용 함수 원형

open_window (Row, Column, Width, Height, FatherWindow, Mode, Machine, Window Handle)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Row, Column

좌 상단 구석 위치

0

0 <= Row, 0 <= column

Width, Height

우 하단 구석 위치

256

0 <= Width, 0 <= Height

FatherWindow

부모 윈도우 값

0

 

Mode

윈도우 모드

vivisble

Visible, invisible, transparent, buffer

Machine

 

NULL

 

Window Handle

표시할 윈도우 핸들값

없음

 

 

사용 예시

open_window(0,0,400,-1,'root','visible','',WindowHandle);

read_image(Image,'fabrik');

disp_image(Image,WindowHandle);

write_string(WindowHandle,'File, fabrik.ima');

new_line(WindowHandle);

get_mbutton(WindowHandle,_,_,_);

set_lut(WindowHandle,'temperature');

set_color(WindowHandle,'blue');

write_string(WindowHandle,'temperature');

new_line(WindowHandle);

write_string(WindowHandle,'Draw Rectangle');

new_line(WindowHandle);

draw_rectangle1(WindowHandle,Row1,Column1,Row2,Column2);

set_part(Row1,Column1,Row2,Column2);

disp_image(Image,WindowHandle);

new_line(WindowHandle);

 


 

* 사용할 폰트 설정

사용 함수 원형

set_font(Window Handle, Font)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Window Handle

표시할 윈도우 핸들값

없음

Window Handle

Font

폰트 쿼리 값

없음

 

 

사용 예시

get_system ('operating_system', OS)

if (OS{0:2} = 'Win')

  set_font (WindowHandle, '-Courier New-18-*-*-*-*-1-')

else

  set_font (WindowHandle, '-*-courier-bold-r-normal--22-*-*-*-*-*-iso8859-1')

 

 

 

 


 

* 그레이 레벨 확장하기 (Opening과 비슷) –구멍 늘리기

사용 함수 원형

gray_dilation_shape(Hobject Image, Hobject *ImageMax, const HTuple &MaskHeight,
const HTuple &MaskWidth,const HTuple &MaskShape
)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

변환할 이미지 포인터

 

 

ImageMax

변환된 이미지가 저장될 곳

 

 

MaskHeight

마스크 가로 크기

11

3, 5, 7, 9, 11, 13, 15

MaskWidth

마스크 세로 크기

11

3, 5, 7, 9, 11, 13, 15

MaskShape

마스크 형태

‘Octagon’

'rectangle', 'rhombus', 'octagon'

 

사용 예시

gray_dilation_shape(m_hoSource, &ImageMax, 1.5, 1.5, "rectangle");    

 

 

 

* 그레이 레벨 축소하기 (Closing과 비슷) – 구멍 메우기

사용 함수 원형

gray_erosion_shape(Hobject Image, Hobject *ImageMax, const HTuple &MaskHeight,
const HTuple &MaskWidth,const HTuple &MaskShape
)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

변환할 이미지 포인터

 

 

ImageMax

변환된 이미지가 저장될 곳

 

 

MaskHeight

마스크 가로 크기

11

3, 5, 7, 9, 11, 13, 15

MaskWidth

마스크 세로 크기

11

3, 5, 7, 9, 11, 13, 15

MaskShape

마스크 형태

‘Octagon’

'rectangle', 'rhombus', 'octagon'

 

사용 예시

gray_erosion_shape(m_hoSource, &ImageMax, 1.5, 1.5, "rectangle");


 

* 경계 값으로 새 영역 구하기

사용 함수 원형

threshold (Image, Region, MinGray, MaxGray);

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

변환할 이미지

 

 

Region

경계선으로 구한 영역

 

 

MinGray

경계 값을 구할 최소값

128.0

0.0, 10.0, 30.0, 64.0, 128.0, 200.0, 220.0, 255.0

MaxGray

경계 값을 구할 최대값

255.0

0.0, 10.0, 30.0, 64.0, 128.0, 200.0, 220.0, 255.0

 

사용 예시

#include "HIOStream.h"

#if !defined(USE_IOSTREAM_H)

using namespace std;

#endif

#include "HalconCpp.h"

 

int main (int argc, char *argv[])

{

  if (argc != 4)

  {

    cout << "Usage : " << argv[0] << " 'image' MinGray MaxGray" << endl;

    return (-1);

  }

  HImage   image (argv[1]), Sobel;

  HWindow  win;

image.Display (win);

 

  int MinGray = atoi (argv[2]);

  int MaxGray = atoi (argv[3]);

 

  Sobel = image.SobelAmp ("sum_abs", 3);

 

  HRegionArray rand  = ((image >= MinGray) & (image <= MaxGray)).Skeleton();

  HRegionArray lines = rand.Connection();

  HRegionArray edges = lines.SelectShape("area", "and", 10.0, 10000000.0);

  edges.Display (win);

  win.Click ();

  return (0);

}


 

* 두 영역 합치기

사용 함수 원형

connection(Region, &ConnectedRegions);          

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Region

입력되는 영역값

 

 

ConnectedRegions

합칠 영역값

 

 

 

사용 예시

#include "HIOStream.h"

#if !defined(USE_IOSTREAM_H)

using namespace std;

#endif

#include "HalconCpp.h"

 

int main (int argc, char *argv[])

{

  HImage   image (argv[1]);

  HWindow  w;

  w.SetColored(12);

  HRegion Light = image >= 128;

  Light.Display(w);

  HRegionArray Many = Light.Connection();

  cout << "Nummber of regions after threshold = " << Many.Num();

  Many.Display(w);

}

 

* 일부 영역 선택하기

사용 함수 원형

select_shape(Hobject Regions, Hobject* SelectedRegions, const HTuple& Features, const HTuple& Operation, const HTuple& Min, const HTuple& Max)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Regions

선택할 영역

 

 

SelectedRegions

선택된 영역

 

 

Features

선택할 방법

"area"

"area", "row", "column", "width", "height", "row1", "column1", "row2", "column2", "circularity", "compactness", "contlength", "convexity", "rectangularity", "ra", "rb", "phi", "anisometry", "bulkiness", "struct_factor", "outer_radius", "inner_radius", "inner_width", "inner_height", "max_diameter", "dist_mean", "dist_deviation", "roundness", "num_sides", "orientation", "connect_num", "holes_num", "area_holes", "euler_number", …

Operation

집합 조건

"and"

"and", "or"

Min

선택할 최소 조건

150.0

0.0 ≤ Min ≤ 99999.0

Max

선택할 최대 조건

99999.0

0.0 ≤ Max ≤ 99999.0

 

사용 예시

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
 
int main ()
{
  HImage        img ("affe");
  HWindow       w;
  HRegionArray  reg  = img.Regiongrowing (3, 3, 5, 0);
  HRegion       circ = HRegion::GenCircle (100, 100, MinRadius);
  HRegionArray  seg  = reg.SelectShapeProto (circ, "fits", 0, 0);
  seg.Display (w);
  w.Click ();
  return(0);
} 

* 지정 영역을 원하는 형태로 변경하기

사용 함수 원형

shape_trans(Hobject Region, Hobject* RegionTrans, const HTuple& Type)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Region

바꾸자 하고자 하는 영역

 

 

RegionTrans

바꾼 후 영역

 

 

Type

영역을 변경할 모양

"convex"

"convex", "ellipse", "outer_circle", "inner_circle", "rectangle1", "rectangle2", "inner_rectangle1", "inner_center"

 

사용 예시

shape_trans(SelectedRegions, &RegionTrans, "rectangle1");                                           // 영역을변경


 

* 영역 일부 선택

사용 함수 원형

clip_region(Hobject Region, Hobject* RegionClipped, const HTuple& Row1, const HTuple& Column1, const HTuple& Row2, const HTuple& Column2)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Region

선택하고자 하는 원 영역

 

 

RegionClipped

선택된 영역이 저장될 곳

 

 

Row1

자르고자 하는 좌측 Y 위치

0

0, 128, 200, 256

Column1

자르고자 하는 좌측 X 위치

0

0, 128, 200, 256

Row2

자르고자 하는 우측 Y 위치

256

128, 200, 256, 512

Column2

자르고자 하는 우측 X 위치

256

128, 200, 256, 512

 

사용 예시

clip_region(ConnectedRegions, &RegionClipped, 478, 578, 640, 796);                                // 찾을영역지정


 

* 구한 영역 개수 구하기

사용 함수 원형

count_obj(Hobject Objects, Hlong* Number)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Objects

영역 개수 구할 목표 영역

 

 

Number

구한 영역 개수가 저장될 곳

없음

 

 

사용 예시

count_obj(RegionTrans, &SelectNum);                                                // 영역 개수 구하기

 

 

* 자료형 변경하기

사용 함수 원형

tuple_int(const HTuple& T, Hlong* Int)   // 정수형

tuple_abs(const HTuple& T, double* Abs) // 절대값 나머지 실수도 이런 식의 함수를 사용

 

매개변수 설명

매개 변수

설명

기본값

권장 값

T

변환할 값

 

 

Int

변환 된 값이 저장 될 곳

 

 

 

사용 예시

tuple_int(SelectNum, &nNum);                                                       // 자료형 변경

 

 


 

* 라인 굵기 설정

사용 함수 원형

set_line_width(const HTuple& WindowHandle, const HTuple& Width)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

라인 굵기 지정할 윈도우 핸들

 

 

Width

라인 굵기 값

1

(Width>=1) && (Width<=2000)

 

사용 예시

set_line_width(m_htDisp, 1);                                                                      // 선굵기

 

 

* 표시 색상 설정하기

사용 함수 원형

set_color(const HTuple& WindowHandle, const HTuple& Color)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

윈도우 핸들

 

 

Color

표시할 색상

"white"

"black", "white", "red", "green", "blue", "cyan", "magenta", "yellow", "dim gray", "gray", "light gray", "medium slate blue", "coral", "slate blue", "spring green", "orange red", "orange", "dark olive green", "pink", "cadet blue"

사용 예시

set_color(WindowHandle,['red','green'])

disp_circle(WindowHandle,[100,200,300],[200,300,100],[100,100,100])

 

* 영역 표시 방법 설정

사용 함수 원형

set_draw(const HTuple& WindowHandle, const HTuple& Mode)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

윈도우 핸들

 

 

Mode

영역 채우기 모드

"fill"

"fill", "margin"

 

사용 예시

set_draw(m_htDisp, "margin");                                              // margin 외곽만표시<-> fill (내부 칠하기)


 

* 영역 중심 구하기

사용 함수 원형

area_center(Hobject Regions, Hlong* Area, double* Row, double* Column)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Regions

중심 값을 구하고자 하는 영역

 

 

Area

구한 중심 값이 저장될 영역

 

 

Row

중심값 세로 값이 저장될 공간

 

 

Column

중심값 가로 값이 저장될 공간

 

 

 

사용 예시

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
main()
{
  Tuple   area, row, column;
  HImage   img ("affe");
  HWindow  w;
  img.Display (w);
  w.Click ();
  HRegionArray   reg = (img >= 164).Connection ();
  reg.Display (w);
  w.Click ();
  area = reg.AreaCenter (&row, &column);
  for (int i = 0; i < reg.Num (); i++)
  {
    cout << "Row    [" << i << "]" << "= " << row[i].D ();
    cout << "\t\tColumn [" << i << "]" << "= " << column[i].D () << endl;
  }
  cout << "Total number of regions: " << reg.Num () << endl;
  return(0);
}

 

* 텍스트 위치 설정하기

사용 함수 원형

set_tposition(const HTuple& WindowHandle, const HTuple& Row, const HTuple& Column)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

윈도우 핸들

 

 

Row

표시할 세로 위치

24

 

Column

표시할 가로 위치

12

 

 

사용 예시

set_tposition(m_htDisp, nZoomScale + 10, nZoomScale + 10);                        // 텍스트 표시 위치 설정

 

* 텍스트 쓰기

사용 함수 원형

write_string(const HTuple& WindowHandle, const HTuple& String)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

윈도우 핸들

 

 

String

표시될 텍스트 값

"hello"

 

 

사용 예시

write_string(m_htDisp, "Left Camera 검사오류");                                              // 텍스트 표시 하기


 

* 사각영역 표시하기

사용 함수 원형

disp_rectangle1(const HTuple& WindowHandle, const HTuple& Row1, const HTuple& Column1, const HTuple& Row2, const HTuple& Column2)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

윈도우 핸들

 

 

Row1

좌 상단 세로 값

16

0, 64, 128, 256, 511

Column1

좌 상단 가로 값

16

0, 64, 128, 256, 511

Row2

우 하단 세로 값

48

0, 64, 128, 256, 511

Column2

우 하단 가로 값

48

0, 64, 128, 256, 511

 

사용 예시

set_color(WindowHandle,'green')

draw_region(MyRegion,WindowHandle)

smallest_rectangle1(MyRegion,R1,C1,R2,C2)

disp_rectangle1(WindowHandle,R1,C1,R2,C2).

Halcon 설치시 유의 사항

1. 사용 목적에 적합한 옵션을 선택
- full : 개발 버전 설치 시 전체 설치
- compact : 개발 버전 설치 시 일부만 설치 (예제 이미지 등은 설치 안됨에 유의)
- demo : 데모 버전 설치 시
- runtime : 런타임 버전 설치 시

2. 설치될 PC의 사양에 맞게 설치함
- SSE 또는 SSE2 : HALCON 설치 시 해당 PC의 CPU가 SSE 또는 SSE2를 지원여부에 따라 설치

3. 나머지는 그대로 설치하면 됨


 * Halcon 라이선스 설치
1. Halcon 설치시 라이선스 동글에 따라 맞는 버전을 선택하여 라이선스 동글 드라이버 설치
2. 라이선스 동글을 해당 단자(패러렐의 경우 프린터 포트에 USB에 경우 USB에)에 장착
3. 라이선스 파일을 C:\Program File\MVTec\Halcon\license 밑에 해당 라이선스 파일을 복사
4. Hdevelop를 실행시 정상적으로 실행되는지 확인


* 할콘 라이브러리 헤더 파일 정의

C++에서 사용할 경우 HalconCpp.h 을 사용하고자 하는 곳에 추가
C에서 사용할 경우에는 HalconC.h 를 사용

Ex) #include "HalconCpp.h" – C++
#include "HalconC.h" – C


* MFC에서 할콘 라이브러리 기본 설정 방법

1. 상위에 네임 스페이스를 정의함
using namespace Halcon;

2. 구성 속성을 아래와 같이 변경

* C/C++/일반 부분중 추가 포함 디렉터리 부분을 다음과 같이 변경
"$(HALCONROOT)\include";"$(HALCONROOT)\include\cpp"

* 링커/일반 부분 중 증분 링크 사용과 추가 라이브러리 디렉터리 부분을 다음과 같이 변경
증분 링크 사용과  - 예(/INCREMENTAL)
추가 라이브러리 디렉터리 - "$(HALCONROOT)/lib/$(HALCONARCH)"

* 링커/입력에서 추가 종속성 부분을 다음과 같이 변경
halconcpp.lib or parhalconcpp.lib


한 PC에 두개이상의 버전 설치 방법은 아래 첨부 문서를 참고


[출처] : http://cafe.naver.com/opencv.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=576

AAchromatic 색상이 없음. 색상이 없다는 것은 검정색에서 흰색의 범위에 해당하는 회색을 의미한다.

Adaptive algorithm(적응적 알고리즘) 어떤 자료를 그 자료에 대한 사전 지식없이 처리하는 알고리즘.

Additive color(부가적 컬러) 서로 다른 주파수 분포를 가지는 빛의 조합으로 생성되는 색상. 기본색상은 빨강, 녹색, 파랑이다. 부가 시스템은 방사성이므로 빛을 생성한다.

Affine Transform(어파인 변환) 회전, 전이, 크기 변화와 이들의 조합으로 이루어지는 선형 기하 변환.

Algorithm(알고리즘) 어떤 문제를 해결하거나 작업을 수행하기 위한 단계들의 집합.

Aliasing(에일리어싱) 영상의 최고 공간 주파수의 두 배 보다 적은 비율로 영상을 샘플링했을 경우 발생하는 결과. 영상의 에일리어싱은 대각선의 경계를 따라 톱니 모양의 계단 형태로 영상을 확장할 수 있다.

Alpha channel(알파 채널) 알파 블렌딩(alpha blending)에 사용되는 값들과 알파을 위한 저장소. 알파 블렌딩은 기존의 두 화소들을 결합하여 새로운 화소를 만들어 내는 수단을 제공한다. 알파 채널에 있는 자료들은 객체의 반 투명성을 제공한다.

Analog-to-Digital converter(A/D, D/A 변환기) 아날로그 전압을 디지털 전압으로 변환하는 장치.

Anti-aliasing(엔티 에일리어싱) 에일리어싱 현상에 의해 톱니바퀴 모양으로 변한 선의 경계를 부드럽게 해주는 기술. 이 기술에서는 인접 화소를 평균화하기 위해 건형 보간법이 주로 사용된다.

Area process(영역 처리) 하나의 화소를 그 화소와 인접 화소들의 값들에 따라 변경하는 영상처리.

Aspect ratio 영상의 가로와 세로의 크기 비율. 텔레비젼의 경우 4:3이다.

Barrel distortion(배럴 왜곡) 영상을 물고기 눈으로 본 것과 같이 만드는 일반적인 왜곡.

Basis function(기저 함수) 다른 함수를 구성하는 함수들의 집합.

Bilinear interpolation(양선형 보간법) 4개의 주어진 값들 사이의 새로운 값을 만들어내는 방법. 두 방향의 선형 보간법과 관련된다.

Bilinear transformation(양선형 변환) 목표 화소의 소스주소를 결정하기 위한 선형 보간법을 사용하는 변환.

Bilevel(이진 레벨) 0 1, 검정색과 흰색 둘 중 하나의 값으로 이루어 진다.

Bit-mapped graphics(비트 맵 그래픽스) 화소들의 배열로 이루어지는 영상. 레스터 그래픽스(raster graphics)라고도 불린다.

Blurring(블러링) 영상에서 상세한 부분을 제거하는 과정. 화소의 정보들이 입접 화소들에 스며드는 경향이 있다. 이 효과는 카메라에서 초점이 맞지 않을 때 나타난다.

Brightness(밝기) 광원이 발산하는 빛의 정도를 나타내는 시각, 지각의 요소.

CAT(Computer-aided tomography) 컴퓨터 지원 단층 촬영.

CCD(Charg coupled device) CCD는 영상을 획득하기 위해 사용되는 빛의 센서이다. 대부분의 캠코더들이 CCD의 기반이다.

CCIR 국제 라디오 자문 회의.

CCIR recommandation 601-1A NTSC PAL을 모두 지원하기 위해 정의된 컬러 비디오 표준.

CCITT 표준을 설정한는 국제 표준의 약자. 본 명칭은 International Telephone and Telegraph Consultative Committee이다.

CT 컴퓨터 단층 촬영. X-선을 이용한 영상 획득 시스템. 전형적으로 골격 영상을 얻기위해 사용된다.

Checksum(체크섬) 오류 검출을 위해 사용되는 자료. 한 영상의 모든 바이트들이 오버플로우를 무시하면서 더해진다. 그 결과 바이트가 체크섬이다. 영상의 전송시에 체크섬이 영상자료와 함께 전송된다. 만약 체크섬이 영상을 받은 컴퓨터에서 계산한 값과 다르면, 전송 오류가 발생한 것이다. 체크섬은 때때로 영상의 헤더 부분에 저장되기도 한다.

Chrominance(색상) 하나의 색상과 같은 밝기값을 가지는 기준의 흰색사이의 차이.

CMY Cyan, Magenta, Yellow의 기본 값들로 구성된 차분 색상 공간. 이것은 RGB 컬러 공간의 반대이다.

CMYK 출력 산업에서 기본적으로 사용되는 차분 컬러 공간. CYMK Cyan, Magenta, Yellow, blacK을 대표한다. 대부분의 출력 장치들은 부가색상 공간을 사용한다. CYMK Cyan, Magenta, Yellow, blacK 색소를 적용함으로써 흰색 표면으로부터 색상을 제거해 만들어진다는 의미에서 차분이다.

Codebook(코드북) 각각이 그에 해당하는 색인을 가진 영상 패턴들의 집합. 영상 압축은 영상 전체의 패턴을 대신해서 코드북의 색인만으로 영상의 부분을 표현함으로써 이루어질 수 있다.

Color gamut(색상 전역) 기본 컬러들의 비율을 바꾸어 혼합함으로써 얻어질 수 있는 전체 색상의 스펙트럼.

Color space(색상공간) 색상의 수학적 표현. RGB는 카테션 좌표 시스템에 기반을 두며, HSI는 극 좌표 시스템에 기반을 둔다.

Compositing(합성과정) 여러 영상의 부분들을 결합하여 하나의 영상을 만드는 과정.

Compression(압축) 자료를 좀더 작은 양의 자료로 표현하는 과정. 이것은 중복되는 정보를 제거함으로써 이루어질 수 있다. 또 다른 기술은 가장 자주 사용되는 자료를 짧은 자료로 표현하는 것이다.

Compression ratio(압출률) 압출률은 자료가 얼마나 압축되는가 하는 정도를 말한다. 만약 2메가 바이트 영상을 100킬로 바이트로 압축하는 압축 알고리즘을 적용한다면, 압축률은 20이 된다. (2,000,000 bytes / 100,000 bytes)

Cone() 색상과 상세한 부분을 감지할 수 있는 눈 속의 감광기관.

Continuous tone(연속된 색조) 일관성 있고 끊기지 않는 밝기값. 사진은 연속된 색조이다.

Contouring(컨투어링) 영상을 충분한 비트로 표현하지 않으므로써 만들어지는 영상 제작물. 윤곽영상은 영상에서 부드러운 전환 대신에 날카로운 데비를 가진다. 이러한 색상 영역은 지리적 윤곽 지도와 유사하게 영상을 만든다.

Contrast(대비) 영상에서 어두운 부분과 밝은 부분 사이의 밝기값의 변화.

Contrast stretching(대비 확장) 대비가 낮은 영상에서 대비를 높이는 기술.

Control points(제어점) 영상 왜곡에 사용되는 기준점들. 전형적으로 제어점들은 근원 영상에서의 지리적 위치와 그에 대응하는 목표 영상에서의 위치로 구성된다.

Convolution(회선) 영상의 스무딩(smoothing)과 샤프닝(sharpening)과 같은 효과를 위해 사용되는 영상 작업. 이 과정은 매우 간단하다. 중심화소의 인접화소들에 대한 가중화된 합이 중심화소의 위치에 할당된다. 이 가중치들은 회선 커널이나 마스크로 불리는 배열로 구성된다.

Convolution coefficient(회선 계수) 회선 커널이나 마스크의 개별적 가중치.

Convolution kernel(회선 커널) 회선 계수들의 배열, 회선 마스크라고도 불린다.

Convolution mask(회선 마스크) 회선 계수들의 배열, 회선 커널이라고도 불린다

Cornea 눈의 동공과 홍채를 감싸고 있는 투명한 외피막

Cross dissolve 화소 대 화소의 보간을 통해 한 영상을 다른 영상에 혼합시키는 기술

CRC(Cyclic Redundancy Check) 오류 검출 기술. 다항식 기반의 알고리즘이 한 블록의 자료에 적용되어 CRC문자를 만든다. 이 문자는 저장되어 자료와 함께 전송된다. 수신측에서는 CRC 알고리즘을 수행하여 새로운 CRC문자를 생성한다. 만약 이들이 일치하지 않으면 자료가 손상된 것이다. 이것은 때로 영상 헤더에 포함되기도 한다.

CRT(Cathod Ray Tube) 텔레비젼 화면과 컴퓨터 출력 장치를 위해 사용되는 커다란 진공관

DCT(Discreat Cosine Transform) 영상압축을 포함한 많은 응용프로그램에 사용되는 변환

DFT(Discreat Fourier Transform) 이산 퓨리어 변환

DIP(Document Image Processing) DIP 시스템은 서류들을 디지털화하여 획득, 저장, 출력할 수 있는 종이 없는 환경에 사용된다.

Decoder(해석기) 암호화된 자료를 원래의 자료 또는 합당한 표현으로 해석 해주는 시스템의 일부

Densitometer(사진 농도계) 필름을 통해 전송되는 빛의 양을 측정하는 장치

Difference image(차영상) 하나의 영상을 화소 단위로 다른 영상에서 뺀 결과 영상

Digital-to-Analog converter(D/A) 디지털 값들을 아날로그 전압으로 변환하는 장치

Digitize(디지타이즈) 연속된 영상을 디지털 자료로 변환하는 과정. 이것은 샘플링(sampling)과 양자화를 포함한다.

Dithering(디더링) 회색 색조를 검은 점들로 흉내내는 방법. 이것은 또한 작은 색상들의 집합으로부터 많은 색상들을 생성하기 위해 사용된다.

Downsampling(다운샘플링) 하나의 영상을 더 작은 샘플로 표현하는 과정. 가장 대표적인 예가 영상을 1보다 작은 비율로 축소하는 것이다.

Encoder(인코더) 인코딩을 수행하는 시스템의 일부. 인코딩은 자료를 다른 형태로 변환하는 과정이다. 이것은 자료의 압축과 암호화를 포함한다.

Entropy coding(엔트로피 코딩) 원래의 자료를 좀더 효율적으로 표현하기 위해 통계적 중복성을 사용하는 인코딩 방법

Error diffusion(오류 유포) 컬러 영상이나 흑백 영상을 좀더 적은 양의 bits/pixel로 표현하기 위한 기술. 이것은 하나의 값을 추정하고 실제 값과 추정된 값 사이의 오류를 계산한다. 이 오류는 이웃화소들에게 유포 된다.

FFT(Fast Fourier Transform) Fourier 변환을 빠르게 수행할 수 있는 알고리즘

Filter(필터) 하나의 신호에서 특정한 부분을 제거하기 위한 기술 또는 장치. 영상에서 특정한 요소를 제거한다.

Finite impulse response filter(FIR) 출력이 현재의 입력과 이전 입력에 의존적인 비재귀적 디지털 필터.

Fovea 망막에서 cone들이 집중해 있는 작은 타원형의 파인 곳

Fourier Transform(퓨리어 변환) 영상 자료를 공간 영역에서 주파수 영역으로 변환하는 방법

Fractal compression(프렉탈 압축) 영상을 조각들로 표현될 수 있는 객체들의 집합으로 표현하는 영상 압축 기술.

Frame(프레임) 전체 영상. 비디오에서 프레임은 비디오 스트림에서 하나의 정지 영상이다.

Frame buffer(프레임 버퍼) 그래픽 시스템에서 출력 장치에 보여지는 자료를 저장하는 메모리. 이중버퍼 그래픽을 사용한다면 출력 장치는 두 개의 프레임 버퍼를 왔다갔다할 수 있다. 이것은 애니메이션에서 두 번째 프레임 버퍼에서 새로운 프레임을 만드는 동안 하나의 프레임을 화면에 표시하기 위해 사용된다.

Frame grabber(프레임 획득기) 비디오 시그널을 디지털화하기 위한 장치. 프레임 획득기로 NTSC 신호로부터 프레임들을 획득할 수 있고 이들을 디지털 영상 자료로 변환할 수 있다.

Frame process(프레임 처리) 두 개 이상의 영상에서 화소들에 대한 작업을 통해 화소값을 만들어 내는 과정

Frequency domain(주파수 영역) 하나의 신호를 그것의 기본 주파수 요소들로 표현 하는 것.

Frequency transform(주파수 변환) 하나의 영상을 기본적인 주파수 요소들로 변환하는 작업.

Gamma(감마) 영상 장치들의 비선형 특성들. 비선형 출력 장치에서, 낮은 밝기값의 작은 변화는 밝기값이 클 때와 같은 정도의 변화가 아니다.

Gamma correction(감마 보정) 영상 자료를 영상 장치들의 비선형성을 보정하기 위해 변경하는 기술. 이 변화는 출력 장치들이나 카메라에서 발생할 수 있다. 또한 자료들은 이러한 비 선형성을 보정하기에 앞서 소프트웨어적으로 처리할 수 있다.

Gaussian noise(가우시안형 잡음) 가우시안 히스토그램을 가진 형태의 잡음.

Geometric process(기하학 처리) 영상에서 화소들의 밝기값이 아니라 위치를 변화시키는 과정.

Gray scale(그레이 스케일) 검정색에서 백색에 이르는 밝기값들의 영역. 회색 영역은 전형적으로 256개지만 256개로 한정되지는 않는다.

Halftoning(간색) 이진 요소들의 배열을 통해 연속된 색조의 환상을 만들어 내는 과정. 이 요소들은 출력 장치의 화소가 될 수도 있고 종이나 제한된 숫자의 상태를 가지는 다른 영상 매체에 사용되는 검은 점일 수도 있다.

High pass filter(고주파 통과 필터) 저주파를 약화시키는 반면고주파를 허용하는 디지털 필터

Histogram(히스토 그램) 영상에서 화소의 밝기값을 표현하는 막대 그래프

Histogram equalization(히스토그램 평활화) 전체의 가능한 영역을 모두 채우기 위해 영상의 화소값들을 균일하게 분산시키는 기술.

HSI 또 다른 색상 공간. 이것은 색상, 채도, 밝기를 나타낸다. HSI 색상 공간은 원통 좌표계에 기반을 두고 있다. 밝기는 수직축인 Z축을 따라 증가한다. 색상은 각도이고 채도는 반지름이다.

Hue 주로 색상으로 참조되는 값. 기술적으로 hue는 색상의 파장에 대응된다.

Huffman coding(허프만 코딩) 무손실 자료 압축의 한 유형. 작은 비트 스트림이 자료의 발생 확률이 적다는 것을 나타낸다. 발생 확률이 높은 자료들은 더 많은 비트들을 요구한다.

Image analysis(영상 분석) 영상의 내용을 결정하기 위해 영상을 분석하는 연구 분야

Image compression(영상 압축) 하나의 영상을 표현하는 데 필요한자료의 양을 감소시키기 위한 기술의 부류

Image enhancement(영상 신장) 영상에서 선택적인 강조와 억제를 위해 사용되는 기술의 부류.

Impulse noise(충격 잡음) 극 값의 무작위 잡음

Infinite impulse response filter(IIR) 출력이 현재의 입력과 이전의 입력, 그리고 이전 출력에 의존적인 재귀적 필터.

Intensity(밝기) 빛의 크기나 힘.

Interpolation(보간) 주어진 주변의 점들로부터 잃어버린 자료를 생성해 내기 위해 사용되는 기술의 부류. 예를들어 양선형 보간법은 주어진 두 점들 사이의 선형 관계를 가정한다.

ISO(International Organization of Standardization) 국제 표준화 기구

JPEG(Joint Picture Experts Group) JPEG는 이 그룹에서 개발된 영상 압축 표준안으로 일반적으로 알려져 있다. 이러한 형태의 영상압축은 응용에 따라 손실이 있을 수도 있고 손실이 없을 수도있다.

Jaggies 영상에서 대각 윤곽선의 계단 형태. 이것은 에일리어싱의 결과이다.

Lightness(밝기) 스스로 빛을 발하지 않는 물체의 밝기

Look-up table(LUT:룩업 테이블) 색인들이 값을 가리키는 도표

Lossless encoding(무손실 코딩) 압축 과정에서 정보가 손실되지 않는 자료 압축 방법. 만약 어떤 영상이 무손실 알고리즘으로 압축되고 풀린다면 압축을 푼 영상은 원래의 영상과 일치한다.

Lossy encoding(손실 인코딩) 압축 과정에서 정보가 손실되는 자료 압축 방법. 손실된 정보는 북구될 수 없다. 원래의 영상과 압축되었다가 압축을 푼 영상의 차이는 감지될 수도 있고 감지되지 않을 수도 있다. 전형적으로, 손실 압축은 정보의 손실이 많을 수 록 압축률은 더욱 증가한다. 영상의 질과 압출률 사이에는 서로 장단점이 있다.

Low pass filter(저주파 통과 필터) 저주파를 보존하면서 고주파를 약화시키는 디지털 필터. 이 필터는 영상을 부드럽게 만들거나 흐리게 만든다.

Luminance(휘도) 화소의 밝기값

LZW(Lempel-Ziv-Welch algorithm) 중복되는 패턴들을 도표나 디렉토리에 저장하는 손실 자료 압축 알고리즘이다.

MRI(Magnetic resonance imaging;자기 공명 영상) 상호 중첩되는 단편 영상을 획득할 수 있는 단층 영상.

MSI(Magnetic source imaging) 생각중에 있는 뇌의 전기적 신호를 감지할 수 있는 영상 시스템.

Mach band effect(Mach 밴드 효과) 시각 시스템에서 서로 다른 밝기값을 가지는 경계선을 약화시키는 효과.

Machine vision(머신 비젼) 생산 환경의 제어를 위해 획득된 영상을 처리하는 기술

Magnification(확대) 영상을 확대하는 작업

Maximum filter(최대값 필터) 영상에서 한 화소의 주변 화소들에 윈도우를 씌워서 이웃 화소들 중에서 최대값을 출력 영상에 출력하는 필터링.

Median filter(중간값 필터) 영상에서 한 화소의 주변 화소들에 윈도우를 씌워서 이웃 화소들 중에서 중간값을 취하여 출력 영상에 출력하는 필터링.

Minification(축소) 영상을 축소하는 작업

Minimum filter(최소값 필터) 영상에서 한 화소의 주변 화소들에 윈도우를 씌워서 이웃 화소들 중에서 최소값을 출력 영상에 출력하는 필터링.

Moire patterns(무아레 패턴) 영상에서 감지 가능한 간섭 패턴. 흑백 영상을 스캔하는 과정에서 발생할 수 있다. 이러한 패턴들은 또한 컬러 출력에서 CMYK 중 하나 이상의 요소가 다른 요소들에 상대적으로 잘못 위치 하였을 때 발생한다.

Monochrome(모노크롬) 하나의 색상으로 이루어진. 이 용어는 흑백 영상과 초록색(또는 노랑색)의 그래픽 출력 장치를 표현하는 데 주로 사용되었다.

Morphing(모핑) 두 개 이상의 영상을 워핑과 상호 분해를 통해 혼합하는 과정

MPEG(Motion picture experts group) 이 그룹에서 비디오를 압축할 수 있는 알고리즘을 개발하였다. 전형적으로 MPEG 압축 알고리즘을 일컫는다.

NTSC(National Television System Committee) 미국의 컬러 텔레비젼을 위한 표준 협회

Nearest neighbor interpolation(가장 인접한 이웃 화소 보간법) 가장 인접한 값을 보간값으로 시용하는 간단한 보간 기법

Noise(잡음) 디지털 시스템에서 디지타이징, 전송 또는 다른 처리를 하는 동안 발생하는 신호값의 무작위 변환

Nyquist criterion 신호가 최고 주파수의 두 배 이상의 비율로 샘플되어야 한다는 제안 사항. 영상 획득시 이러한 제한 사항이 지켜지지 않으면 에일리어싱이 발생한다.

OCR(Optical character Recognition) OCR 시스템은 텍스트 문서를 스캐닝한 후, 결과 영상을 ASCII 파일로 변환할 수 있다.

PAL(Phase Alternation Line) 비디오 신호에 대한 유럽의 표준안

PET(Positron Emission Tomography) 횡단 자료을 획득할 수 있는 단층 영상 시스템. 기본적으로 신체의 화학적 처리를 감시하기 위해 사용된다.

Palette(팔레트) 실제 색상을 측정할 수 없는 시스템에서 전체 범위의 색상으로부터 선택된 색상의 집합. 컬러 맵의 룩업 테이블 부분이다.

Pel 'Picture element'의 약자

Perspective transform(투시 변환) 투영 정합이라고 불리는 기하 변환. 하나의 점을 통해 하나의 평면이 다른 평면으로 투영한다.

Photometer(포토미터) 밝기값을 측정하는 광학 장치

Photopic vision(포토픽 비젼) 좋은 조명하에서의 시각. Cone vision(콘 비젼)이라고도 불린다.

Pixel(화소) 영상의 기본 요소. 영상은 수많은 작은 점들로 이루어진다. 이들 점들을 화소라고 한다.

Point process(점 처리) 화소의 원래 밝기값이나 위치를 기반으로 화소의 밝기값을 변경시키는 영상처리

Posterization(포스터리제이션) 영상을 너무 작은 비트로 표현했기 때문에 발생할 수 있는 영상의 윤곽화 현상.

Pseudo color(유사 색상) 색이 없는 자료에 색을 부여하는 색 정합. 온도 표현을 위해 사용된다. 영상에서 낮은 온도는 푸른색으로 표현된다. 높은 온도는 붉은색으로 표현된다.

PX64 이산 코사인 변환(DCT)에 기반한 비디오 화상회의에 사용되는 영상압축 표준

Quantize(양자화) 아날로그 신호의 디지털 값을 결정하는 과정

Quantization error(양자화 오류) 연속적인 신호가 제한된 양자화 레벨로 표현될 때 발생하는 오류로 정밀도의감소를 초래한다. 오류는 원래 신호와의 차이이다.

Raster(래스터) 컴퓨터 출력 장치나 TV화면에 나타나는 스캔라인의 집합. 래스터 그래픽스는 열과 행으로 배치된 화소들의 배열로 구성된 영상을 말한다.

Reflectance(반사율) 물체로부터 반사되는 빛의 비율

Registration(등록) 두 개의 독립된 영상들을 재배열하는 처리. 주로 두 영상을 화소 단위로 비교하기 위해 사용된다.

Resampling(재추출) 이미 샘플된 자료를 다른 비율로 다시 샘플링 하는 것. 영상을 축소, 확대하는 작업을 포함한다.

Resolution(해상도) 영상 샘플의 척도. 프린터에서는 인치당 점수 수(dpi)로 정의한다. 이 용어는 영상의 면적을 나타낼 때도 사용된다.

Retina(망막) 빛의 처리를 담당하고 있는 눈 내부의 피막

RGB 빨강 초록, 파랑으로 구성된 부가 색상 공간. 이 색상 모델은 대부분 컴퓨터 그래픽스 출력 하드웨어에 사용된다.

Rods(간상체) 빛의 명암을 감지하는 눈의 감광장치

Run length encoding 간단한 비손실 자료 압축 알고리즘. 만약 255라는 같은 값을 가지는 50개의 화소가 연속적으로 나열되어 있으며, 이들 화소들은 50 255의 두 숫자로 표현될 수 있다.

Salt and pepper noise 영상의 최소값과 최대값으로 구성된 잡음

Sampling 아날로그 비디오 신호를 이산 화소들로 나누는 것. 이 처리의 원래의 저의는 양자화를 포함하지 않는다.

Saturation(채도, 포화) 색상이 희색 빛으로부터 자유로운 것처럼 보이는 정도

Scaling 영상을 확대하거나 축소하는 기하학적 처리

Scanner(스캐너) 영상을 읽고 디지털로 바꿔주는 장치

Scan line(스캔 라인) 영상이나 출력 장치의한라인 또는 열

Scientific visualization(과학적 시각화) 직접적으로 관찰할 수 없는 자료들을 그래픽으로 표현하기 위한 연구 분야

Scotopic vision(암순응 시각) 어두움에 적응해야하 하는 환경하에서의 시각이 색상을 인지할 수 있는 능력이 감소한다는 특성을 가진다.

Segmentation(분할) 영상을 유사한 특성을 가지는 영역들로 나누는 처리. 이 처리는 주로 패턴 인식에서 첫번째로 수행된다.

Separability(분리성) 2차원의 연산이 2개의 1차원 연산으로 분할될 수 있도록 허용하는 특성. 이것은 계산상의 관점에서 볼 때 매우 효과적인 특성이다.

Sharpening(샤프닝) 고주파 보존 필터링에 기반을 둔 영상처리로 영상의 시각적 날카로움이 증가한다.

Spatial frequency(공간 주파수) 영상의 주기적 요소에 대한 특성화. 인접 화소들 사이의 밝기값의 변화가 고주파이다. 같은 밝기값을 가지는 영역이나 영상의 밝기값이 천천히 변화하는 부분은 저주파이다.

Subtractive color(차분 영상) 기본값을 흰색으로부터 뺌으로써 생성되는 색상.차분 색상의 기본 요소는 cyan, magenta, yellow이다.

Spatial domain(공간 영역) 영상자료의 일반적 영역. 위치에 대한 밝기값

Tile 비트 맵의 2차원 영역. JPEG 압축은 8*8 화소의 tile 연산을 수행한다.

TIFF(Tagged image file format) 그래픽 파일 포맷의 일종. 배우 유명하고 전자 출판에서 많이 사용된다.

Translation(이동) 영상이나 그 일부를 이동시키는 연산

Tristimulus values 어떤 특정한 색상 공간에서 색상을 표현하기 위한 세 가지 숫자.

True color(실 색상) 비트 수를 충분히 사용함으로써 색상이 시각적으로 완전하게 보이도록 그래픽을 표현하는 데 사용되는 형용사. 대부분의 책이나 응용 프로그램에서, 실 색상은 24비트 색상을 의미한다. 각 화소는 빨강색, 초록색, 파랑색의 3바이트 정보로 표현된다. 이 용어는 수년 동안 많이 사용되어 왔다. 이 용어는 그래픽 제품의 공급자 마다 서로 다른 의미로 사용되기도 한다.

Uniform noise(정규 잡음) 정규 히스토그램을 가지는 잡음

Unsharp masking 영상을 날카롭게 하기 위해 원래 영상에서 흐린 영상을 빼는 기술

Unsampling 이미 샘플된 영상의 샘플링 비율을 증가시키는 것. 이것은 스케이링 요소를 1보다 크게 함으로써 가능하다.

Vector graphics(벡터 그래픽스) 형태가 만들어지는 것을 기술함으로써 영상을 표현하는 방법. 벡터 그래픽스 파일은 선, 상자, 원을 그리기 위한 명령어와 인수들로 이루어진다.

Vector quantization(벡터 양자화) 영상의 타일들을 코드북의 색인으로 표현하는 손실 영상 압축 기법. 코드북은 많은 영상 패턴들에 대한 룩업 테이블이다.

Visual acuity(시각적 차이) 서로 다른 두 객체들이 서로 구분되는 정도

Volume rendering(볼륨 렌더링) 획득된 영상 자료의 3차원 모델을 나타내는 기술

Voxel(복셀) 3차원 화소. 화소와 같은 정보뿐 아니라 관찰점에서의 거리를 명시하는 정보도 포함한다.

Warping(워핑) 영상을 늘리거나 크기를 조절하는 기하학적인 처리. 순수한 스케일링과 달리 크기 변화의 정도가 영상 전체에 대해 균일하지 않다.

Wavelet transform(웨이블릿 변환) 하나의 신호를 매우간단한 기본 함수들로 재구성하는 변환

Windowing function(윈도우 함수) 퓨리어 변환을 적용하기 전에 영상에 적용되는 함수. 퓨리어 변환에서 주기적인 함수를 해석할 때 발생하는 영상 경계선의 불연속성을 감소시키기 위해 사용된다.

YIQ 북미 NTSC broadcast television에 사용되는 색상 모델. Y는 밝기값을, I Q는 색상을 나타낸다.

YUV 유럽 PAL broadcast television에 사용되는 색상 모델. Y는 밝기값을, U V는 색상을 나타낸다.

Zoom(확대) 영상이나 그 일부분을 확대하는 작업

히스토그램에 대하여 궁금해하시는 회원님들이 계셔서 이두형과장께 허락받고 옮겨왔습니다. 도움이 되었으면 합니다.
출처:  http://www.zuikouser.com/bbs/zboard.php?id=pds&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=134

DSLR카메라로 촬영을 한 다음 촬영한 이미지를 보면서 info를 클릭하면 그 이미지의 농도분포를 알려주는 그래프가 보입니다.
이 것을 히스토그램이라고 하는데 이를 지원하는 이유는 LCD에 출력된 화상이 절대 결과물의 상태와 상이하기 때문에 이미지를 보며노출 적용 여부를 확인하기 위함입니다. 즉 시각적인 판단 보다는 원본의 물리적인 데이터를 보여준다고 보면 되겠죠.

1. 아래 첫번째 이미지와 같이 가로는 밝고 어두운 농도 구역을 의미하고 세로축은 분포량을 의미합니다.
두번째 코스모스 이미지를 보면 전체적으로 눈에 띠는 검은색이나 흰색이 별로 없고 전반적으로 중간색조의 농도들이 많이 분포되어 있음을 알 수 있습니다. 그러나 자세히 보면 완전 검은색과 완전 흰색이 있긴 하죠?
그렇다면 그래프는 첫 이미지와 같게 형성될겁니다. 왼쪽 하단부는 완전 검은색 존이고 오른쪽 끝은 완전 하얀색 존이므로 분포 곡선은 좌우에 양 끝에서부터 형성됩니다.
또 전체적으로 중간색조가 많으니까 중간색 영역부분으로 갈 수록 분포도가 크게 형성되겠죠.
이제 이해하셨는지요...


2. 파도치는 장면을 찍은 두 사진의 분포를 보면 밝은 쪽의 그래프가 높고 두껍게 형성되어 있습니다. 눈으로 봐도 밝은 색조의 농도가 많은 사진이쟎아요...
단지 차이가 있다면 오른쪽 사진에는 암부의 농도분포도 크게 자리잡고 있습니다.
그게 당연하다고 느끼신 회원님들은 이미 히스토그램에 대하여 이해를 하신 것입니다.


3. 이번 경우는 상대적으로 암부에 톤이 집중되는 이미지 입니다. 이미지를 볼 때 밝은 영역과 어두운 영역이 어느 정도 일까?하고 살펴보시기 바랍니다.
왼쪽의 단풍 이미지의 오른쪽 끝엔 약간의 빈 공간이 있습니다. 이는 제일 하얀색이 이미지에 없다는 것을 의미합니다. 오른쪽 송수관쪽엔 끝에 하얀색 농도가 분포되어 있는 것을 알 수 있지요?
이제 그래프의 느낌이 이미지와 통하는지요?


4. 지금까지의 설명을 토대로 아래 이미지를 보면서 다시 한번 분석해 봅시다.
왼쪽의 사진은 노츨이 약간 부족되어 있습니다. 빛이 부족하게 들어가니까 이미지에 하얀색이 없어 오른쪽 끝부분이 빈공간으로 남겠죠.
그래서 이를 카메라에서 확인한 다음 노출을 더 주어 두번째 사진을 찍습니다.
그리고 히스토그램을 보니 이전 이미지보다 오른쪽 밝은 부분이 더 늘어나 있습니다.
전 여기까지 만족을 했구요...만일 더 밝은 부분이 있기를 바란다면 좀더 노출을 주어야갰지요.
그러나 너무 과도하게 노출을 더하면 반대로 이미지에 검은색이 없어지겠죠.
그렇게 되면 사진이 밋밋해 질꺼라고 판단했기에 그 정도로 만족을 한겁니다.


5. 마지막 이미지들도 같은 이야기 인데 왼쪽은 본래 피사체의 암부와 명부의 차이가 약했고 노출도 약간 부족되어 칙칙합니다. 그래서 콘트라스트를 강하게 +2로 증가시켰습니다.
그리고 노출도 약간 늘려줬구요. 이렇게 하니 원래 밋밋했던 피사체의 톤이 확장되면서 그래프의 좌우에 모두 분포된 이미지를 만들 수 있었습니다.


여기까지 응용할 수 있다면 히스토그램이 왜 필요한지 아셨을 꺼예요...

원래 피사체 상태가 검은색은 없거나 흰색이 없는데 노출만으로 그래프 분포를 모두 확장할 수는 없습니다.
콘트라스, 채도까지도 관계가 있거든요.

정리하면 히스토그램은 피사체와 노출의 상호 관계를 그래픽적으로 판단하게 해주는 도구일 뿐입니다.
그래서 LCD를 믿지 못해도 그래프로 노출 상태를 어찌할 것인지 방향을 잡을 수 있게해주는 것이죠.

전 가끔은 흰색을 질감이 존재하면서 가장 밝게 묘사하기를 바랄 때가 있습니다.
이때 노출을 조절한 다음 힛스토그램으로 확인을 합니다. 가장 밝은 영역이 오른쪽 끝에서부터 시작되도록요.....
오른쪽 끝부분의 농도분포가 너무 커지면 지나쳐 하얀색의 질감이 날라갈 수 있겠죠...
[초급] OpenCV 를 이용한 영상 이진화(Binarization) 강좌
 
오 늘은 손쉽게 구현할 수 있는 영상 이진화(Binarization)에 대해서 설명해 드리도록하겠습니다. 영상 이진화란 RGB 값으로 다양하게 분포되어 있는 색상값을 0 과 1 만의 값으로 표현하는 것 입니다.실제적으로는 RGB 컬러 영상에을 흑백(Gray channel)영상으로 바꾼뒤 특정 임계값(Threshold)을 기준으로 초과값은 255 로, 이하 값은 0 변환하게 되지요. 아래 T9-camera 윈도우 영상과 T9-output 윈도우 영상을 보시면쉽게 이해가 가실 겁니다. T 값 128 을 기준으로 초과값은 255 로 변환되어 흰색으로 보여지고 있고 이하 값은 0 으로변환되어 검은색으로 보여지고 있습니다.
 
 
- 실행 결과

소 스 코드가 다소 길어 졌지만 크게 보면 카메라를 입력 받는 소스에서 이진화 함수인 cvThreshold() 함수가 추가된 것 밖에는 없습니다. 이 함수를 사용할 때 주의해야 할 것은 항상 흑백 이미지로 변환해서 넣어 주어야 한다는 것.

  cvThreshold(gray, output, threshold, 255, CV_THRESH_BINARY); 

위 함수는 입력된 gray 이미지에서 threshold 값을 초과한 값은 255 로 변환하고 이하는 0 으로 변환하여output 이미지를 만들어 냅니다. 이와는 반대로 적용되게 한다거나 일정 값 이하는 0 으로 변환하고 초과되는 값만 보여주는등의 옵션이 있습니다. 옵션을 변화 시켜가며 변화되는 모습을 익혀 보도록 합시다.

  CV_THRESH_BINARY        : threshold 값 초과는 255, 이하는 0

  CV_THRESH_BINARY_INV  : threshold 값 초과는 0, 이하는 255

  CV_THRESH_TRUNC         : threshold 값 초과는 threshold, 이하는 그대로

  CV_THRESH_TOZERO       : threshold 값 초과는 그대로, 이하는 0

  CV_THRESH_TOZERO_INV : threshold 값 초과는 0, 이하는 그대로

이 번 프로그램에는 Trackbar 가 추가되었는데 이는 나중에도 유용하게 쓰이므로 잘 익혀 두시기 바랍니다. 아래 함수는"T9-camera" 이름의 윈도우에 0 부터 255 범위를 같는 "T" 이름의 Trackbar 를 붙입니다. Trackbar의 초기 위치는 threshold 값이 결정하며 bar 를 조절하여도 그 값은 threshold 변수에 들어가게 됩니다. 그리고현재는 NULL 로 되어 있지만 이부분에 함수명을 적으면 bar 가 변경될 때마다 해당하는 함수를 호출하게 됩니다. 이 함수는반드시 int 형 변수 하나를 가지고 있어야 하고 이 변수에 Trackbar 의 값이 넘어 오므로 함수에서 값을 가지고영상처리를 해주면 됩니다.

  cvCreateTrackbar("T", "T9-camera", &threshold, 255, NULL);

cvCvtColor() 함수는 Color 변환을 해주는 함수입니다. 아래 함수는 RGB 채널을 가지고 있는 image 를Gray 채널로 바꾸어서 gray 에 넣어주는 역할을 합니다. 마지막 인자는 Color 변환 모드인데 여기에도 다양한 옵션이존재하므로 필요한 모델을 사용하시면 됩니다.

  cvCvtColor(image, gray, CV_RGB2GRAY);

  CV_RGB2GRAY  : 흑백으로 변환
  CV_RGB2YCrCb : 주로 Skin Color 모델을 할때 변환( 손 제스쳐 인식, 얼굴 인식 )
  CV_RGB2HLS
  CV_RGB2HSV
  CV_RGB2Lab
  CV_RGB2Luv
 

- 소스 코드(압축 파일 첨부)

 
#include <cv.h>
#include <highgui.h>

 
void main()
{
    int i, threshold = 128;
// 임계값(Threshold) 설정

    IplImage* image = 0;
    IplImage* output = 0;
    IplImage* gray = 0;
 
    CvCapture* capture = cvCaptureFromCAM(0);
// 카메라 연결

    cvNamedWindow( "T9-camera", 0 ); // 원본 영상을 띄울 윈도우
    cvNamedWindow( "T9-output", 0 );
// 결과 영상을 띄울 윈도우

    cvCreateTrackbar("T", "T9-camera", &threshold, 255, NULL); // "T9-camera" 윈도우에 bar 를 붙이고 threshold 값을 변화 시킴
                                                                                         
// 이름은 "T" 를 붙이고 0 부터 255 사이의 범위값을 가짐

    while(1) {
        cvGrabFrame( capture );
        image = cvRetrieveFrame( capture );
        cvShowImage( "T9-camera", image );

        if(!output){
            gray = cvCreateImage( cvGetSize(image), IPL_DEPTH_8U, 1); // 흑백 이미지 생성
            output = cvCreateImage( cvGetSize(image), IPL_DEPTH_8U, 1); // 흑백 이미지 생성
        }

        cvCvtColor(image, gray, CV_RGB2GRAY); // 컬러를 흑백으로 변환
 
        if( cvWaitKey(10) >= 0 )
            break;

        // 영상의 각 픽셀(x,y) 값이 threshold 값의 초과는 255 로, 그 이하는 0 으로 변환

        cvThreshold(gray, output, threshold, 255, CV_THRESH_BINARY);
        output->origin = image->origin; // 방향이 뒤집어 진것을 바로 잡아줌
 
        cvShowImage( "T9-output", output );
    }
    cvReleaseImage( &gray );
    cvReleaseImage( &output );
    cvReleaseCapture( &capture );
    cvDestroyWindow( "T9-output" );
    cvDestroyWindow( "T9-camera" );
}

+ Recent posts