이미지를 복잡한 블렌딩 없이 단순히 배치하여 하나의 큰 이미지로 만드는 작업은 다양한 비전 검사 파이프라인에서 자주 등장한다. HALCON에서는
tile_images와 tile_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) 파이프라인에서 여러 장의 이미지를 자연스럽게 이어붙이는 데 사용된다.