5.10. 비트 단위 연산

이전 페이지의 산술 연산은 픽셀 , 즉 정수 밝기나 패킹된 색상 워드에 대해 동작합니다. 비트 단위 연산은 한 단계 더 낮은 수준에서, 그 값 내부의 개별 비트에 대해 동작합니다. 각 픽셀이 단 한 비트인 이진 이미지의 경우, 비트 단위 연산이 자연스러운 산술입니다.

5.10.1. 비트 단위 연산 계열

Image 클래스는 두 입력을 받는 비트 단위 연산의 전체 집합을 제공합니다:

각 연산은 두 이미지 버퍼의 모든 바이트에 대해 비트 단위로 동작합니다. 각 바이트가 여덟 개의 픽셀을 담는 이진 이미지에서는, 처리되는 바이트당 여덟 픽셀에 대해 연산이 실행됩니다. 그레이스케일이나 색상 이미지에서는 모든 채널의 모든 비트에 대해 실행됩니다.

Three truth tables for the AND, OR, and XOR operations side by side. Each table has four rows for the input combinations 0-0, 0-1, 1-0, 1-1 and columns labelled A, B, and result. Below the truth tables, two small binary images A and B are drawn as grids of black and white cells, with the result of ANDing them shown to the right as a grid that keeps only the cells that were white in both.

상단: AND, OR, XOR 진리표 – 각 연산의 비트 수준 의미. 하단: 두 이진 이미지 A와 B, 그리고 A.b_and(B) 의 결과로, 결과는 두 입력 모두에서 켜져 있던 위치만 남깁니다.

5.10.2. 마스크 결합

이 연산들의 가장 흔한 단일 용도는 마스크 결합입니다. 마스크는 위치별로 어떤 조건이 충족되는지를 나타내는 이진 이미지입니다. 서로 다른 조건을 기술하는 두 마스크는 비트 단위 연산 중 하나를 통해 복합 조건을 기술하는 단일 마스크로 결합됩니다:

b_and() 입력 마스크 모두 그 위치에서 켜져 있었을 때만 켜지는 위치를 갖는 마스크를 만듭니다. 즉 두 조건의 자연스러운 “and”입니다. 전경 마스크를 임계값 처리 단계의 출력과 b_and 로 결합하면 임계값의 매칭이 전경으로 제한됩니다.

b_or()어느 한쪽 입력 마스크라도 켜져 있을 때마다 켜지는 위치를 갖는 마스크를 만듭니다. 즉 자연스러운 “or”입니다. 임계값 처리된 두 출력을 OR로 합치면 두 색상 범위 중 어느 하나에라도 일치한 모든 것을 포괄하는 단일 마스크가 만들어집니다.

b_xor()정확히 한쪽 입력 마스크만 켜져 있을 때마다 켜지는 위치를 갖는 마스크를 만듭니다. 두 마스크가 일치하지 않는 위치를 검출하는 데 유용합니다. 즉 임계값 출력이 두 프레임 사이에서 변한 위치, 두 참조 마스크 간의 대칭 차이 같은 것들입니다.

부정형 변형 – b_nand(), b_nor(), b_xnor() – 은 부정되지 않은 대응 연산의 보완을 만듭니다. 조건을 기술하는 자연스러운 방식이 “이 둘 중 어느 것도 아닌” 또는 “둘 다는 아닌”일 때 유용합니다. 흔하지는 않지만, AND 뒤에 별도의 invert() 를 이어 붙여 부정을 구성하지 않아도 되도록 이러한 것이 존재한다는 점을 알아 둘 만합니다.

5.10.3. 이진이 아닌 이미지에서의 비트 단위 연산

비트 단위 연산은 그레이스케일과 색상 이미지에서도 실행됩니다. 이미지가 이진과 유사한 내용을 담고 있을 때, 즉 픽셀이 모두 0 또는 255 인 그레이스케일 프레임이나 완전한 검은색과 완전한 흰색 픽셀만 있는 RGB565 프레임처럼, AND, OR, XOR가 진정한 이진 이미지에서와 같은 조합을 줄 때 가장 유용합니다. 값의 전체 범위에 걸쳐 있는 이미지의 경우, 보통 이전 페이지의 산술 연산이 더 적합합니다.