IDL/New Graphics

바코드 형태의 이미지의 표출 및 응용 [1]

이상우_IDL 2025. 11. 11. 16:20
728x90

오늘은 IDL에서 바코드(Barcode)의 형태를 띈 이미지를 표출하는 방법을 소개해보고자 합니다. 즉 마치 바코드처럼 세로 방향의 검은 선들이 흰 바탕에 표시되는 방식을 뜻합니다. 다만 오늘 해보고자 하는 것은 바코드의 모습을 띈 이미지를 표출하는 것일 뿐이고 바코드의 생성 메커니즘을 적용하여 바코드 자체를 생성하는 것은 아님을 미리 밝혀둡니다. 그러면 먼저 바코드 형태의 데이터를 다음과 같이 0과 1의 값들로 구성된 1차원 배열로 가정하여 임의로 정의해봅시다.

 

code = [1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, $
  0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, $
  1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, $
  1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1]
HELP, code

 

여기서는 95개의 0 또는 1의 값들로 구성된 배열인 code를 생성하였습니다. 그래서 이 데이터를 기본적으로 사용을 할텐데, 다만 이미지로 표출할 것을 감안하여 전반적인 패턴은 그대로 유지하면서 크기만 좀 더 키우는 것이 좋을 것 같습니다. 이를 위하여 다음과 같이 CONGRID 함수를 사용해봅시다.

 

nx = N_ELEMENTS(code)
dx = CONGRID(code, nx*3, /CENTER)

 

이와 같이 3배 크기(95x3=285)로 키운 dx를 생성합니다. 그리고 1차원 데이터인 dx를 바탕으로 바코드의 형태를 띈 2차원 이미지 데이터를 생성하기 위하여 다음과 같은 과정을 진행합니다.

 

img = dx#REPLICATE(1, 100)
HELP, img
PRINT, MIN(img), MAX(img)

 

여기서 생성된 img는 285x100의 구조를 가지며 배열 내 값들은 0 또는 1로만 구성됩니다. 이제 이 데이터를 이미지의 형태로 표출해봅시다. 그 과정은 다음과 같습니다.

 

win = WINDOW(DIMENSIONS=[800, 500], /NO_TOOLBAR)

ct = COLORTABLE(0, /REVERSE)
i = IMAGE(img, RGB_TABLE=ct, MARGIN=0.2, /CURRENT)

 

여기서는 이미지 표출에 있어서 0번 컬러테이블을 뒤집은 컬러테이블을 사용하였습니다. 이것은 이미지 데이터의 최소값인 0은 흰색으로 그리고 최대값인 1은 검은색으로 표시되도록 하기 위한 것입니다. 이러한 과정에 의하여 표출된 이미지의 모습은 다음과 같습니다.

 

 

이 모습을 보면 나름 바코드와 비슷한 느낌인 것 같습니다. 그리고 만약 다른 컬러테이블을 사용한다면 당연히 다른 색상들로 구성된 이미지가 될 것입니다. 예를 들어서 컬러테이블만 다음과 같이 변경해보면 그 결과 이미지는 다음과 같습니다.

 

ct = COLORTABLE(43)

 

 

만약 이러한 바코드 형태의 이미지를 표출하면서 사용되는 두가지 색상들을 직접 지정하고 싶다면, 필요한 두가지 색상들로만 구성된 컬러테이블을 만들어서 사용하면 됩니다. 예를 들어서 lime 및 crimson 색상으로 구성되도록 하려면 컬러테이블만 다음과 같이 정의하면 됩니다.

 

ct = COLORTABLE(['lime', 'crimson'])

 

그러면 그 결과는 다음과 같습니다.

 

 

또 다른 예제로서 이번에는 cyan 및 indigo 색성으로 구성되도록 해보면 다음과 같습니다.

 

ct = COLORTABLE(['cyan', 'indigo'])

 

 

이와 같은 처리 방식은 단지 바코드의 형태를 띈 이미지를 표출한다는 의미도 있지만, 적절히 응용하면 좀 더 다양한 방식의 활용도 가능합니다. 다음 회차에서는 그러한 예제를 살펴보기로 하겠습니다.

 

 

 

* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.

LIST