관리 메뉴

Bull

[Image Processing] Bit-Plane Slicing (8bit slicing) (by MATLAB) 본문

Computer Science/Image Processing

[Image Processing] Bit-Plane Slicing (8bit slicing) (by MATLAB)

Bull_ 2024. 3. 21. 23:56

개념


bit slicing은 1차원으로 이루어진 흑백 사진에서  bit단위로 사진을 추출해 총 8개의 단위로 쪼개서 나눈다.

 

예를들어 pixel의 값이 01010000 이라면 이 pixel 원소의 위치에서 각각 5,7번째를 원소에 저장한다.

 

bitSlices라는 3차원 배열이 있다면,

bitSlices(:,:,7) 슬라이스에 해당 위치의 픽셀 값은  = 64로 저장,
bitSlices(:,:,5) 슬라이스에 해당 위치의 픽셀 값은 1 * 2^(5-1) = 16로 저장

된다.

 

이 기법은 중요하지 않은 데이터를 압축하거나,

 

미디어같이 영상정보를 통신으로 처리할 때는 중요한 정보를 우선적으로 보내고

 

나머지 중요하지 않은 정보는 천천히 보내서 데이터를 유용하게 관리하기 위해 사용된다.

 

또한, 보안 분야에서는 특정 정보를 숨기기 위한 "스테가노그래피"에서도 사용된다.

 

예시 사진

출처:  Digital Image Processing( Rafael C . Gonzalez  ,  Richard E. Woods  저자)

 

코드 구현


img = imread("wolf.jpg");
%imgGray = uint8(mean(img,3));
imgGray = rgb2gray(img);


bitSlices = zeros(size(imgGray, 1), size(imgGray, 2), 8, 'uint8');

for i = 0:7
    bitSlices(:,:,i+1) = bitget(imgGray, i+1) * 2^i; 
end

for i = 1:8
    subplot(2, 4, i);
    imshow(bitSlices(:,:,i));
    title(['Bit ', num2str(i-1)]);
end

 

코드 설명

bitSlices = zeros(size(imgGray, 1), size(imgGray, 2), 8, 'uint8');

zeros() : 배열을 만들 때 모두 0으로 초기화 시켜준다.

  - 인자1: (3차원 배열기준), 넓이의 값

  - 인자2: (3차원 배열기준), 높이의값

  - 인자3: (3차원 배열기준), 채널의 값, 여기서 8bit slicing을 위한 3차원 배열

  - 마지막 인자: uint8원소를 이룬다.

 

for i = 0:7
    bitSlices(:,:,i+1) = bitget(imgGray, i+1) * 2^i; 
end

bitSlices(:,:,i+1) : 1,2,의 모든 원소에 대한 i+1칸 (1~8)

bitget() : 해당 원소에 대하여 LSB를 기준으로 i+1번째 비트를 가져온 후,  2^i승을 곱하여 표현.

  -ex 원소: 00010010

array(:,:,i+1) binary decimal multifly_result
bitSlices(:,:,1)  00000001 2^0 0
bitSlices(:,:,2)  00000010  2^1 2
bitSlices(:,:,3)  00000100  2^2 0
bitSlices(:,:,4)  00001000  2^3 0
bitSlices(:,:,5)  00010000  2^4 16
bitSlices(:,:,6)  00100000  2^5 0
bitSlices(:,:,7)  01000000  2^6 0
bitSlices(:,:,8) 10000000  2^7 0

 

이렇게 되면 각 pixel의 정보가 비트단위로 들어가기 때문에 만약 통신으로 데이터를 주고 받을 때 사용한다면

 

중요해보이는 bitSlices(:,:,8) 부터 받으면서 연속적으로 더하면서 렌더링 되는 원리라고 생각하면 된다.

 

for i = 1:8
    subplot(2, 4, i);
    imshow(bitSlices(:,:,i));
    title(['Bit ', num2str(i-1)]);
end

figure 탭에 이미지를 띄우는 코드이다.

 

간단하게 말하자면 subplot(2, 4, i)을 통해 각각의 위치에 일정하게 배치시킨다.

 

결과


출처: https://kr.freepik.com/premium-photo/colorful-wolf-poster-featuring-the-painting-colorful-wolf-by-sofia-metal-queen_46092455.htm