DICOM Tag PhotometricInterpretation(0028,0004)이 RGB인 영상입니다.
RGB 영상은 각 픽셀의 색상을 빨간색, 녹색, 파란색의 세 가지 채널로 이루어져 있으며 세 채널의 조합으로 모든 색상을 표현할 수 있습니다.
2. Planar Configuration
RGB 영상의 픽셀데이터 구성에 대해 알기 위해선 먼저 PlanarConfiguration(0028,0006) 태그를 먼저 확인해야 합니다.
이 태그는 DICOM 이미지에서 색상 채널 데이터가 어떻게 배열되는지를 정의하는 DICOM 태그입니다. 해당 값은 0 혹인 1로 표시되며 각각 다음을 의미합니다.
0인 경우 RGB 채널이 인터리브(Interleaved)하게 이루어져 있습니다. Color-by-pixel 방식이라고도 하며 모든 채널의 데이터를 교대로 저장하여 RGB 데이터가 연속된 형식으로 존재합니다. 이는 각 픽셀에 해당하는 RGB값이 연속적으로 저장됨을 뜻합니다. 예: [R0, G0, B0, R1, G1, B1, ...]
1인경우 RGB 채널이 플래너(Planar)하게 이루어져 있습니다. Color-by-plane 방식이라고도 합니다. 각 색상 채널이 별도의 2D 이미지로 저장되며, 각 채널이 독립적으로 배열됩니다. 이는 각 색상 채널이 개별적으로 저장되어 있음을 뜻합니다. 예: 예: [R0, R1, R2, ..., Gn, Gm, Gn+1, ..., Bn, Bm, Bn+1, ...]
3. BitAllocated와 BitStored
DICOM에서 픽셀 데이터를 다루기 위해선 또 다른 태그를 더 살펴봐야 합니다.
Bit Allocated(0028,0100)는 각 픽셀에 할당된 총 비트 수를 의미하며 일반적으로 8, 12, 16 비트가 사용됩니다. Bits Stored(0028,0101)는 각 픽셀에 저장된 실제 유효 비트 수를 의미합니다.
예를 들어, Bits Allocated가 16이고, Bits Stored가 12이면, 각 픽셀 데이터는 16비트로 저장되지만, 그중 12비트만 유효 데이터로 사용됩니다. 나머지 4비트는 일반적으로 0으로 채워짐을 의미합니다.
4. 픽셀 데이터 계산
이제 기본적인 태그(rows 및 colums)를 사용해 RGB 영상의 픽셀 데이터 위치를 알아낼 수 있습니다.
PlanarConfiguration이 1일 때 rows(H)와 columns(W)가 512인 경우 x, y좌표 300, 250의 RGB값은 다음과 같이 구할 수 있습니다.
⇒ 한 프레임의 픽셀 수: W x H ⇒ 한 프레임의 채널 데이터 크기: W x H ⇒ 한 프레임의 전체 데이터 크기: 3 x W x H
여기서 각 프레임의 데이터는 연속적으로 저장되므로, N번째 프레임의 시작 위치는 다음과 같이 계산할 수 있습니다
⇒ N번째 프레임의 시작 위치: (N-1) * 3 * W * H
PlanarConfiguration이 1이므로 각채널의 시작위치는 다음과 같이 유추할 수 있습니다.
⇒ Red 채널의 시작 위치: (N-1) * 3 * W * H ⇒ Green 채널의 시작 위치: (N-1) * 3 * W * H + W * H ⇒ Blue 채널의 시작 위치: (N-1) * 3 * W * H + 2 * W * H
마지막으로 실제 우리가 원하는 픽셀의 인덱스 위치는 다음과 같이 계산할 수 있습니다.
⇒ 픽셀 인덱스: y * W + x
따라서 위의 모든 식을 종합하면 PlanarConfiguration이 1일 때 rows(H)와 columns(W)가 512인 경우 x, y좌표 300, 250의 RGB의 위치는 다음과 같이 산출됩니다.
⇒Red 값의 위치: (N-1) * ( 3 x W x H)+ (y * W + x) ⇒Green 값의 위치: (N-1) * ( 3 x W x H) + (W * H)+ (y * W + x) ⇒Blue 값의 위치: (N-1) * ( 3 x W x H) + (2 * W * H) + (y * W + x)
다음으로 PlanarConfiguration이 0일 때 rows(H)와 columns(W)가 512인 경우 x, y좌표 300, 250의 RGB값은 다음과 같이 구할 수 있습니다.
⇒ 한 프레임의 픽셀 수: W x H ⇒ 한 프레임의 전체 데이터 크기: 3 x W x H
여기서 각 프레임의 데이터는 연속적으로 저장되므로, N번째 프레임의 시작 위치는 다음과 같이 계산할 수 있습니다
⇒ N번째 프레임의 시작 위치: (N-1) * 3 * W * H
다음으로 우리가 원하는 픽셀의 인덱스 위치는 다음과 같이 계산할 수 있습니다.
⇒ 픽셀 인덱스: y * W + x
PlanarConfiguration이 0이므로, 각 픽셀의 R, G, B 값이 연속적으로 저장됩니다. 따라서, N번째 프레임의 시작 위치에서 해당 픽셀 인덱스를 3배 한 값이 각 채널의 시작 위치가 됩니다.
⇒ Red 값의 위치: (N-1) * (3 * W * H) + 3 * (y * W + x) ⇒ Green 값의 위치: (N-1) * (3 * W * H) + 3 * (y * W + x) + 1 ⇒ Blue 값의 위치: (N-1) * (3 * W * H) + 3 * (y * W + x) + 2
$ ./PalServer.sh Shutdown handler: initalize. Increasing per-process limit of core file size to infinity. dlopen failed trying to load: steamclient.so with error: steamclient.so: cannot open shared object file: No such file or directory [S_API] SteamAPI_Init(): Loaded '/home/ubuntu/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so')
3. 서버 설정
이제 다른 친구들이 내 서버에 접속할 수 있게 만들어야 합니다. 만약 자신이 퍼블릭 IP를 직접 사용하고 있다면 이 설명은 스킵하셔도 됩니다.
하지만 내 전용 서버가 공유기에 연결되어 있는 경우에는 포트포워딩이 필요합니다. 포트포워딩의 개념이나 원리에 대해서는 스킵하고 설정하는 방법에 대해서만 설명합니다.
먼저 크롬과 같은 웹 브라우저를 열고 http://192.168.0.1/의 주소(IPTime 공유기 기준)로 이동합니다.
보안 인증을 하고 로그인 한 뒤 관리도구 > 고급설정 > NAT/라우터 구성 > 포트포워드 설정으로 이동합니다.
이제 위와 같이 PalServer에 대한 포트포워드 구성을 진행합니다. 최소 하나의 항목을 추가해야 합니다.
1. 규칙이름: 포트포워드 설정을 구성하는 이름입니다.
2. 내부 IP 추소: 전용 서버가 설치된 PC의 IP 주소입니다. 만약 관리페이지를 전용 서버가 설치된 PC에서 들어갔다면 체크박스를 클릭해 간단하게 설정합니다.
3. 프로토콜: 해당 포트를 사용하는 프로토콜입니다. PalWorld는 기본적으로 UDP를 사용하는 것으로 알려져 있습니다 전 그냥 둘 다 활성화시켜놨습니다.
4. 외부 포트: 외부망에서 공유기로 접속할 때 사용하는 포트입니다. 포트포워드 설정에 겹치지 않게 적절하게 수정하셔도 됩니다.
5. 내부포트: 전용서버가 사용하는 포트입니다. PalWorld는 기본적으로 8211 포트를 사용합니다
** 참고: 내부포트 8211은 서버에서 사용하고 27015는 Query에, 25575는 RCON에 사용된다고 알려져 있습니다. 서버만 구동하는 데에는 8211 포트만 설정해도 서버는 구동됩니다.
4. 게임 설정
이제 서버 설정이 끝났습니다. 이제 인게임 설정을 진행합시다. 내가 만든 서버가 공개되어 아무나 들어오게 하고 싶진 않습니다. 방정보와 비밀번호를 설정해 봅시다.
위의 그림은 DICOM UL 중 A-ASSOCIATE-RQ PDU와 A-ASSOCIATE-AC PDU의 PDU 인코딩의 예시입니다.
PDU(Protocol Data Unit)는 계층 내의 피어 엔터티 간에 교환되는 메시지 형식입니다. PDU는 프로토콜 제어 정보와 사용자 데이터로 구성됩니다. PDU는 필수 고정 필드와 하나 이상의 항목 및/또는 하위 항목을 포함하는 선택적 가변 필드로 구성됩니다.
정리하자면
* PDU는 네트워크 통신에서 데이터를 전송하는 데 사용되는 단위입니다. * DICOM에서 PDU는 네트워크 상에서 DICOM 메시지를 나타내는 단위를 말합니다. * PDU는 DICOM 메시지의 헤더 정보와 함께 전송되어야 합니다. * DICOM 네트워크 프로토콜에서는 PDU가 통신의 기본적인 단위로 사용되며, 여러 종류의 PDU가 정의되어 있습니다.
2. PDV - Presentation-data-value
PDV는 DICOM 메시지의 일부로, 특히 DICOM 데이터를 전송하는 데 사용됩니다. DICOM 메시지는 PDU (Protocol Data Unit)의 일부로 전송되며, PDU에는 여러 PDV가 포함될 수 있습니다.
PDV는 실제 DICOM 데이터를 담고 있는 부분으로 다양한 종류의 PDV가 존재하고, 각 PDV 유형은 특정한 역할을 수행합니다.
정리하자면
* PDV는 PDU 내에서 실제 데이터를 포함하는 부분을 나타냅니다. * PDU는 여러 PDV를 포함할 수 있습니다. * PDV는 DICOM 메시지의 일부로, 실제 DICOM 데이터를 포함하고 있습니다. * PDV는 PDU의 일부로 전송되어, 네트워크 상에서 DICOM 데이터의 전송을 담당합니다.
DICOM 태그를 다루던 중 태그 타입에 1C라고 적혀있는 걸 보고 문득 TagType의 정확한 정의가 궁금해져서 알아본 후 작성한 글입니다.
Data Element Type
DICOM에서 태그 타입 ‘1C’는 조건적으로 필수인 타입 1이지만 비어있거나 존재하지 않을 수 있는 타입 2가 포함된 데이터 요소입니다.
다른 말로 태그 타입 ‘1C’는 데이터 요소가 필수로 DICOM 객체에 나타나야 하지만 특정 환경이나 다른 연관된 태그의 값에 따라 값을 가지고 있지 않을 수 있는 태그 타입을 가리킵니다. 만약 연관된 데이터 요소가 특정 값을 갖는다면 ‘1C’ 데이터 요소는 반드시 값을 가져야 하지만 연관된 데이터 요소가 특정한 값을 갖지 않는 다면 ‘1C’ 데이터 요소는 값을 빈값으로 갖거나 태그가 없을 수 있습니다.
DICOM 표준에서는 세 개의 데이터 요소 타입을 정의하고 있습니다:
타입 1: 값을 반드시 가져야 하는 필수 요소.
타입 2: 다른 연관된 요소에 따라 값을 가질 수도 가지지 않을 수도 있는 조건적으로 필요한 요소
타입 3: 값을 가질 수도 가지지 않을 수도 있는 선택적 요소.
'1C' 태그 타입은 유형 1과 유형 2의 조합으로, 특정 조건에서는 요소가 값을 가져야 하지만 다른 조건에서는 비어 있거나 존재하지 않을 수 있는 태그 타입입니다. DICOM 파일을 읽거나 쓸 때 '1C' 데이터 요소를 올바르게 처리하여 해당 요소에 대해 정의된 조건에 따라 데이터가 적절하게 해석되고 처리되도록 해야 합니다.
DICOM Modality Worklist (MWL)은 의료 영상에서 환자 정보 및 검사 요청을 병원의 방사선 정보 시스템(RIS)이나 병원 정보 시스템(HIS)에서 가져와 CT, MRI, X-ray 및 초음파 등의 영상 장비에 표시하는 표준 프로토콜입니다.
HIS(병원 정보 시스템), RIS(방사선 정보 시스템) 및 EMR/EHR 솔루션은 환자 인구 통계 및 검사 일정 정보의 마스터 인덱스를 제공합니다. Modality Worklist는 환자 주문, 검사 요청 및 환자 이름, ID, 검사 유형 및 일정 정보와 같은 관련 정보 목록을 제공합니다.
Modality worklist는 필요한 환자 데이터와 검사 세부 정보를 검색하기 위해 모달리티 워크리스트에 액세스 할 수 있으며, 이를 통해 수동 입력의 필요성을 제거합니다. MWL이 없으면 양식은 환자 건강 관리 정보(PHI)를 가져와 양식에 수동으로 입력해야 합니다. 이 프로세스는 추가 수작업과 인적 오류의 위험을 초래할 수 있습니다.
DICOM Modality Worklist를 사용하면 방사선과 기술자는 올바른 환자에게 올바른 검사를 수행하고 참조 의사나 환자 치료에 참여하는 기타 의료 전문가로부터 특정 지시사항이나 특별 요청 사항을 볼 수 있습니다. 모달리티 워크리스트는 작업 흐름 및 효율성을 향상시키고 검사 지연을 줄이며 환자 안전을 향상시킬 수도 있습니다.
NuPhy Air60 구매 및 사용 후기를 남겨봅니다. 다른 후기들은 다 Air75길래 포커 배열은 인기가 없나 했더니 와디즈 펀딩이 Air75였군요.
1. 서론
사실 이번 키보드 구매는 반쯤 충동적이었습니다. 때는 무려 한 달이 넘은 3월 말. 3월 31일 2주간 해외 출장을 앞두고 있었고 스트레스로 인한 지름신이 반쯤 올라왔을 때 메일이 옵니다.
아 이거다! 어차피 출장 가 있는 동안엔 못 받고 기다림도 줄고 포커 배열도 써봤고 이쁘고.. 충동구매로 결국 지르고 말았습니다.
옵션은 게이트론 적축, 커버 포함, 키캡 포함해서 총 약 120달러가 나왔으며 10달러 할인쿠폰에 배송비 약 20달러 포함해서 총 약 130달러가 나왔습니다. 환전 수수료가 얼만진 정확히 모르겠습니다만 약 17만 원의 비싼 몸값을 자랑합니다.
출장에서 복귀하고도 2주가 지나 주문한 지 한 달이 됐을 때쯤 통관 안내가 왔습니다. 통관 번호를 바로 입력했음에도 불구하고 2일 반을 잡혀있었습니다. 아이허브 같은 건 워낙 많아서 그런지 통관에 하루도 안 걸리던데..
그렇게 주문한 지 꼭 한 달 만인 4월 29일에 기다리던 키보드를 받아볼 수 있었습니다.
2. 본론
결국 받았습니다. 맨 위에 캐릭터가 그려져 있는 박스가 본품이고 아래의 박스가 커버이며 가장 위에 올라와 있는 게 키캡입니다.
키보드 박스 정면에는 떡하니 캐릭터가 박혀있습니다. NyPhy F01로 봐선 첫 번째 마스코트 캐릭터로 보입니다. 근데 왜 홈페이지나 어딜 찾아봐도 저런 캐릭터가 NuPhy를 대표하고 있단 글이나 그림을 본 적이 없는 걸까요? 아무튼 우측 상단에는 포함된 키보드의 정보가 나와있습니다.
박스 후면에도 키보드 정보와 키보드 레이아웃이 그려져 있습니다. 직구 배송 도중에 상자에 찍힘이 생긴 건 좀 마음이 아프네요.
박스를 뜯자마자 저를 반겨준 건 놀랍게도 한국어가 포함되어있는 기본 설명서였습니다. 사실 직구 제품인 데다가 한국엔 별로 알려지지 않은 제품이라 한국어로 설명이 되어 있단 것만으로도 놀랐습니다.
설명서엔 기본적인 FN키를 사용한 동작에 대해 설명하고 있습니다. 이 부분도 한 가지 아쉬운 점이라면 온라인 페이지에 설명되어있는 부분이 없어 동작을 확인하려면 이 설명서를 직접 확인해야 한다는 아쉬운 점이 있습니다. 왜 공식 홈페이지에 가이드 문서가 없는지 모르겠네요.
설명서 뒤에는 대문짝만 하게 NuPhy F01 캐릭터가 그려져 있습니다. 벽에 붙여두라는 건지 그냥 포스터예요.
심지어 스티커도 줍니다. 이것저것 다 껴주니까 좋긴 한데 이걸 어디에 쓸지는 고민이네요.
드디어 본품이 보입니다. 박스 내 키보드 오른쪽엔 여러 가지 내용물이 함께 포장되어 있었습니다.
모코코가 귀엽게 맞이해 주네요.
공식 홈페이지의 내용물과 비교해보니 다 들어있는 것으로 보입니다. 키보드 키캡을 보면 기본 맥 키캡으로 껴있고 윈도우로 바꿀 수 있는 3개의 여분 키캡을 기본으로 줍니다. 키캡 풀러 반대쪽엔 스위치를 풀러도 함께 있고 여분의 청축 갈축 적축 스위치도 함께 줘서 테스트해보거나 교체할 수도 있습니다. 구성 참 알차고 좋은데 대체 저 20cm짜리 C to C 케이블은 왜 준 건지 모르겠습니다.
후면 모습입니다. 마그네틱 풋을 부착하였고 반짝반짝한 백 플레이트가 맞이해 주고 있습니다.
동봉된 스위치와 키캡입니다. 기본 구성에 윈도우/맥 여분 키캡 주는 데는 꽤 본 것 같은데 여분의 스위치까지 주는 데는 드문 것 같습니다.
키보드 좌측 후면과 좌측 측면입니다. 좌측 측면에 C타입 포트가 있습니다. 유선 연결 및 충전을 진행할 수 있습니다. 스위치는 총 두 개로 윈도우/맥을 전환할 수 있으며 다른 하나는 키보드의 전원과 연결 방식을 담당합니다.
연결을 해서 사용 중인 모습입니다. 좌상부 우상부 라이트는 FN키를 통해 색상을 변경할 수 있습니다. 좌측의 사진이 일반적인 사용의 모습이며 만약 CapsLock을 켠다면 우측의 사진처럼 좌상부의 라이트가 흰색으로 변합니다. 또한 블루투스로 연결하면 잠시 좌상부의 라이트라 파란색으로 표시됩니다.
다음은 키보드 커버입니다. 다른 키보드들과 달리 플라스틱 커버를 제공하지 않습니다. 대신 NUFOLIO V2라고 하는 별도의 전용 커버를 무료로 제공하고 있습니다. 언제 유료로 바뀔진 모르지만 무료로 제공해주는 제품도 INCLUDE를 선택해 주고 있으니 만약 구매하시는 분들은 반드시 INCLUDE를 선택해서 커버를 받아주세요.
오렌지빛의 케이스가 맞이해주고 있습니다. 품질은 꽤 괜찮아 보여요 무료 제공 케이스 수준은 한참 뛰어넘었습니다. 고급지고 맘에 들어요.
내부엔 부드러운 페브릭 소재로 되어 있고 제조사 이름이 음각되어있습니다. 키보드를 두는 하단부는 고무 패드 부분이 음각되어 딱 맞게 되어 있으며 자석으로 고정될 수 있게 디자인되었습니다.
전용 커버답게 딱 들어맞습니다. 다만 문제가 하나 있는데 기울기를 어느 정도 두고 쓰시는 분은 마그네틱 풋을 부착해서 사용하실 텐데 마그네틱 풋을 부착하면 전용 커버를 사용할 수 없습니다.
위 사진처럼 딱 맞는 핏을 자랑하는 전용 커버이기 때문에 우측과 같이 마그네틱 풋을 장착해 둔 경우엔 전용 커버를 사용할 수 없습니다. 다른데 들고 가려면 저 마그네틱 풋은 별도로 챙겨가서 쓰거나 기울기를 포기하고 써야 합니다.
키캡은 별다른 특징이 없습니다. Twilight 콘셉트의 키캡이 프리오더로 주문하면 10달러에 구매할 수 있다고 해서 그냥 껴서 구매하긴 했는데 블랙 콘셉트를 좋아하시는 분이면 바꿔 쓰셔도 될 것 같습니다.
3. 결론
그리 오랜 기간 사용한 것은 아니지만 그래도 회사에서 일주일 정도 사용한 느낌을 알려드리고자 합니다.
먼저 가장 빨리 와닿았던 건 저 오른쪽의 시프트입니다. 개발하면서 < > ? " : 와 같은 부호를 쓸 일이 많은데 기존 텐키리스 키보드에서는 오른쪽 시프트를 사용하는 게 습관이 되어 있던 터라 저 시프트를 사용할 때마다 심지어 지금도 위쪽 방향키를 누르곤 합니다. 엉뚱한 라인에 '가 찍히면서 빌드 오류가 나면 한숨부터 나옵니다.
멀티미디어 키 사용이 굉장히 불편합니다. 거의 못쓰다시피 하고 있습니다. 배열을 보면 아시겠지만 포커 배열 키보드는 F1~F12 키가 없습니다. 일반적으론 FN키와 숫자키의 조합으로 그 기능을 대신하고 있습니다. 사진으로 보이듯이 이 키보드에는 1부터 =까지에 멀티미디어 기능이 할당되어 있습니다. 그러면 이 기능을 어떻게 써야 할까요? 설명서에 나와있긴 하지만 멀티미디어 키를 사용하려면 무려 FN+TAB+F키를 눌러 전환 기능을 사용한 후에 FN키와 숫자키를 사용해 멀티미디어 기능을 사용할 수 있게 됩니다. 물론 다시 F1~F12를 사용하려면 FN+TAB+F키로 전환해줘야 합니다. 반쯤 없는 기능으로 생각하고 있습니다.
그 외에도 전용 프로그램이 없어 백라이트 및 측면 LED 조절이 까다롭다는 점도 들 수 있습니다. 프로그램이 있다면 GUI를 통해 편히 설정할 수 있겠지만 위의 설명서에서 보듯이 FN 키와 방향키 심지어 측면 LED는 FN키와 /키를 누른 채 방향키로 조절해야 합니다. 절전 모드 설정 역시 마찬가지고요. 절전모드를 설정/해제하게 되면 우측의 측면 LED가 두 번 깜빡이는데 X를 누르든 C를 누르든 두 번 점멸하고 맙니다. 현재 켜져 있는지 꺼져있는지는 알 수 없습니다. 모두 전용 프로그램이 있으면 바로 설정하고 설정을 다시 볼 수 있을 텐데 아쉬운 점 중 하나입니다.
블루투스는 FN+Q, W, E, R로 연결할 수 있습니다. 스위치는 무선으로 둔 채 사용하면 됩니다. 2.4G 리시버를 사용하는 경우에도 스위치를 무선으로 둔 채 사용하면 됩니다. 다만 무선으로 둔 채 내가 현자 리시버를 쓰고 있는지, Q에 저장된 기기에 연결되었는지, E에 저장된 기기에 연결되었는지는 구분할 수 없습니다. 이 부분은 당장 키보드를 사용하는 기기를 보면 알 수 있기에 딱히 불편하지는 않았습니다.
키감은 개인마다 느끼는 게 너무 다를 수 있기 때문에 직접 타건 해보는 걸 추천드리고 별도로 평가하진 않겠습니다. 다만 개인적으로는 이전의 씽크웨이 토체티 콜라보 제품의 저소음 적축 보단 소음이 좀 더 있지만 키감은 더 좋고 스위치가 더 짧아서 그런진 모르겠지만 키압도 더 낮게 느껴지는 기분이었습니다.
확실히 유선과 무선 리시버, 블루투스 모두 지원하는 것은 특히 강점이라고 생각합니다. 이전에 사용했던 Anne Pro 2도 유선과 블루투스만을 지원했고 블루투스에서의 키 씹힘과 입력 지연이 간간히 발생해 현재는 잘 사용하지 않고 있습니다. 약 일주일간 사용했지만 현재는 눈에 띄는 입력 지연이나 키 씹힘 현상은 보이지 않고 있습니다.
다만 다시 봐도 배송비 제외 130달러의 가격은 그 어떤 키보드와 비교하더라도 비싼 것은 사실입니다. 17만 원이면 레오폴드 키보드도 살 수 있을 가격으로 알고 있습니다. 다만 디자인과 포커 배열 및 다양한 연결을 지원하는 키보드임을 감안하면 키보드에 많~은 관심이 있는 일부 별난 사람들은 구매해볼 수 있는 독특한 키보드임에는 분명합니다.
일반 범용적인 목적으로는 특히 게임 유저들에겐 절대 추천할 수 없는 키보드지만 이쁘거나 특이한 키보드에 관심이 있고 책상을 넓고 깔끔하게 쓰고 싶다 뭐 이런 핑계를 찾고 키보드를 지르고 싶어 하시는 분들에겐 추천해 볼만한 키보드입니다.