HALCON 이미지 타일링 연산자 활용 가이드

이미지를 복잡한 블렌딩 없이 단순히 배치하여 하나의 큰 이미지로 만드는 작업은 다양한 비전 검사 파이프라인에서 자주 등장한다. HALCON에서는 tile_imagestile_images_offset 두 가지 연산자를 제공하여 이러한 기본적인 타일링 작업을 수행할 수 있다. 타일링을 수행하기 전에 반드시 고려해야 할 세 가지 핵심 요소는 다음과 같다.
  • 입력 이미지 집합: 여러 장의 이미지를 하나의 객체 배열(튜플)로 관리해야 한다.
  • 배치 방향: 이미지를 가로로 나열할 것인지, 세로로 쌓을 것인지 결정해야 한다.
  • 배치 간격: 이미지 사이에 여백을 두고 자유롭게 배치할 것인지, 무간격으로 밀착시킬 것인지 선택해야 한다.

tile_images: 규칙적인 그리드 배치

tile_images 연산자는 입력된 여러 이미지를 지정된 열 개수와 순서에 따라 규칙적인 그리드 형태로 배치한다.
tile_images(Images : TiledImage : NumColumns, TileOrder : )

매개변수 설명:

  • NumColumns: 최종 결과 이미지의 열(column) 개수
  • TileOrder: 타일 배치 순서 ('vertical' 또는 'horizontal')

사용 예시

4장의 이미지(해상도 300×150)를 3개의 열로 배치하는 경우를 살펴보자.

read_image (SrcImg1, '01.jpg')
read_image (SrcImg2, '02.jpg')
read_image (SrcImg3, '03.jpg')
read_image (SrcImg4, '04.jpg')

* 이미지 컬렉션 생성
gen_empty_obj (ImgCollection)
concat_obj (ImgCollection, SrcImg1, ImgCollection)
concat_obj (ImgCollection, SrcImg2, ImgCollection)
concat_obj (ImgCollection, SrcImg3, ImgCollection)
concat_obj (ImgCollection, SrcImg4, ImgCollection)

* 3열, 수직 우선 순서로 타일링
tile_images (ImgCollection, ResultImg, 3, 'vertical')
get_image_size (ResultImg, OutW, OutH)

배치 결과 분석:

4장의 이미지를 3열로 배치하면 최소 2행이 필요하다. 'vertical' 순서를 지정하면 열 단위로 먼저 채워진다—즉, 첫 번째 열의 행을 모두 채우고 다음 열로 넘어간다.

반면 'horizontal'을 지정하면 행 단위로 먼저 채워진다—한 행을 가로로 모두 채우고 다음 행으로 내려간다.

tile_images_offset: 자유로운 좌표 기반 배치

단순 그리드가 아닌, 임의의 위치에 이미지를 배치해야 할 때는 tile_images_offset 연산자를 사용한다.

tile_images_offset(Images : TiledImage : OffsetRow, OffsetCol, Row1, Col1, Row2, Col2, Width, Height : )

기본 사용 예시

2장의 이미지를 세로로 이어 붙이는 경우:

read_image (SrcImg1, '01.jpg')
read_image (SrcImg2, '02.jpg')

get_image_size (SrcImg2, ImgW, ImgH)

gen_empty_obj (ImgCollection)
concat_obj (ImgCollection, SrcImg1, ImgCollection)
concat_obj (ImgCollection, SrcImg2, ImgCollection)

* 이미지1: (0, 0), 이미지2: (ImgH, 0) 위치에 배치
tile_images_offset (ImgCollection, OutputImg, 
    [0, ImgH],      * 각 이미지의 시작 행 좌표
    [0, 0],         * 각 이미지의 시작 열 좌표
    [-1,-1],        * Row1 (기본값 사용)
    [-1,-1],        * Col1 (기본값 사용)
    [-1,-1],        * Row2 (기본값 사용)
    [-1,-1],        * Col2 (기본값 사용)
    ImgW,           * 출력 이미지 폭
    ImgH * 2)       * 출력 이미지 높이

핵심 파라미터 해설:

  • OffsetRow, OffsetCol: 각 이미지의 좌상단 기준 배치 좌표. 이미지 장수만큼의 요소를 가진 배열로 지정한다.
  • Row1, Col1, Row2, Col2: 각 이미지에서 실제로 사용할 영역 지정. -1을 지정하면 전체 영역 사용.
  • Width, Height: 최종 출력 캔버스의 크기. 이 영역을 벗어나는 부분은 잘린다.

간격을 둔 배치

이미지 사이에 가로 방향으로 100픽셀의 여백을 두고, 더 큰 캔버스에 배치하는 예시:

tile_images_offset (ImgCollection, OutputImg,
    [0, ImgH],          * 행 좌표: 0, ImgH
    [0, 100],           * 열 좌표: 0, 100 (두 번째 이미지를 우측으로 100픽셀 이동)
    [-1,-1], [-1,-1],
    [-1,-1], [-1,-1],
    ImgW + 100,         * 출력 폭 확장
    ImgH * 3)           * 충분한 출력 이

확장: 고급 이미지 모자이크

단순 타일링을 넘어 기하학적 변환(투시 변환 등)을 적용한 이미지 합성이 필요한 경우, gen_projective_mosaic 연산자를 활용할 수 있다. 이 연산자는 카메라 캘리브레이션이나 이미지 정합(Image Registration) 파이프라인에서 여러 장의 이미지를 자연스럽게 이어붙이는 데 사용된다.

태그: halcon MVTec Image Tiling Computer Vision Image Processing

6월 6일 02:38에 게시됨