일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- BAEKJOON
- rao
- MATLAB
- PCA
- Flutter
- Dreamhack
- Got
- pytorch
- BOF
- Kaggle
- study book
- fastapi를 사용한 파이썬 웹 개발
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- Image Processing
- DART
- Widget
- system hacking
- Algorithm
- Computer Architecture
- BFS
- ML
- 백준
- ARM
- C++
- llm을 활용 단어장 앱 개발일지
- 영상처리
- MDP
- Stream
- FastAPI
- bloc
- Today
- Total
Bull
[Image Processing] Bit-Plane Slicing (8bit slicing) (by MATLAB) 본문
[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로 저장
된다.
이 기법은 중요하지 않은 데이터를 압축하거나,
미디어같이 영상정보를 통신으로 처리할 때는 중요한 정보를 우선적으로 보내고
나머지 중요하지 않은 정보는 천천히 보내서 데이터를 유용하게 관리하기 위해 사용된다.
또한, 보안 분야에서는 특정 정보를 숨기기 위한 "스테가노그래피"에서도 사용된다.
예시 사진
코드 구현
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)을 통해 각각의 위치에 일정하게 배치시킨다.
결과
'Computer Science > Image Processing' 카테고리의 다른 글
[Image Processing] Gaussian and Butterworth Notch Filter (0) | 2024.05.08 |
---|---|
[Image Processing] Histogram Equalization (by MATLAB) (1) | 2024.03.23 |
[Image Processing] Piecewise linear transformation(구간별 선형 변환) (by MATLAB) (0) | 2024.03.21 |
[Image Processing] 명도변환 (Power-Law Transformations)하기 (by MATLAB) (0) | 2024.03.19 |
[Image Processing] 반전사진 (Negative Image) 만들기 (by MATLAB) (0) | 2024.03.19 |