灰度图像的8位平面分解
生活随笔
收集整理的這篇文章主要介紹了
灰度图像的8位平面分解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
所謂灰度圖像,即指8位256顏色的圖像。將圖像的每一位分別取出來,我們就可以將一幅圖像分解開來,形成8幅圖像。下面我們分別介紹使用matlab分解圖像與使用halcon/c++分解圖像的方法。
matlab8位分解
clc; clear all; A = imread('lena.tif'); % 顯示原始圖像 subplot(3,3,1); imshow(A);title('原始圖像'); % 顯示8個位平面圖像 for i=8:-1:1A_bitplane = bitshift(bitget(A,i),i-1);subplot(3, 3, 9-i+1);imshow(A_bitplane);title(['位平面 ' num2str(i)]); end效果:
matlab8位合并復原
clc; clear all; A = imread('lena.tif'); Array=cell(1,8); % 顯示8個位平面圖像 for i=8:-1:1Array{i} = bitshift(bitget(A,i),i-1); end %%%復原 %%定義全0矩陣 [M,N]=size(Array{1}); B=zeros(M,N,'uint8');for i=1:8B=bitset(B,i,bitget(Array{i},i)); end figure; subplot(1,2,1); imshow(A);title('原始圖像'); subplot(1,2,2) imshow(B);title('復原后圖像');結果:
halcon分解
方法一,自己實現
void Bit() {using namespace Halcon;cout << endl << "Shifting & cutting out bit values:" << endl;HByteImage image("mreut");HWindow w(0,0,image.Width(),image.Height());w.SetPart(0,0,image.Height()-1,image.Width()-1);image.Display(w);int i;cout << "- cutting out bit slices" << endl; for (i=0; i<8; i++) {HRegion reg = (image & (1<<i)) != 0; //按照位切片w.ClearWindow();reg.Display(w);cout << " & bit " << i << endl;}}方法二,使用自帶函數
void Bit() {using namespace Halcon;cout << endl << "Shifting & cutting out bit values:" << endl;HByteImage image("mreut");HWindow w(0,0,image.Width(),image.Height());w.SetPart(0,0,image.Height()-1,image.Width()-1);image.Display(w);int i;cout << "- cutting out bit slices2" << endl;for (i = 0; i < 8; i++){HRegion reg = (image.BitSlice(i+1)) != 0; //按照位切片w.ClearWindow();reg.Display(w);cout << " & bit " << i << endl;}}附加matlab一個好的教程:
- http://www-rohan.sdsu.edu/doc/matlab/toolbox/images/images.html
- bitget,bitset說明文檔
參考文獻:
1.?MATLAB實現256色灰度圖像的8位平面分解2.?Matlab bitget() 函數的使用
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的灰度图像的8位平面分解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker 安装及打springboo
- 下一篇: 技术干货 | 智能家居领域KNX与RS4