[英]RGB image pixels into its binary representation
我是MATLAB和圖像處理的新手,但我搜索了卻找不到答案
如何查看24位RGB圖像的二進制表示形式(每個通道)
因此,例如,我想知道圖像中的像素數x
(任意數)具有
紅色00000001
藍色01100101
綠色11010101
我的意圖是操縱這些值,然后重建圖像
任何指導/幫助將不勝感激
您可以for
-loop此
bitmap = false( [size(img,1), size(img,2), 24] );
for ci=1:3
for bit=0:7
bitmap( :,:, (ci-1)*8+bit+1 ) = bitand( img(:,:,ci), uint8(2^bit) );
end
end
重建更簡單
reconstruct = zeros( [size(img,1), size(img,2), 3], 'uint8' );
for ci=1:3
reconstruct(:,:,ci) = sum( bsxfun(@power, ...
bitmap(:,:,(ci-1)*8 + (1:8) ),...
permute( uint8(2.^(7:-1:0)), [1 3 2] ) ), 3 );
end
另一種方法是使用dec2bin
。
b = dec2bin(img(1,1),8);
例如,如果像素img(1,1)
的紅色,綠色和藍色值為255、223和83,則將得到
11111111
11011101
01010011
其中b(1,:)
是紅色的二進制(11111111), b(2,:)
是綠色的(11011101)等。
但是,出於改變lsb值的目的,這不是首選或最直接的方法。 考慮使用按位和運算。
在pixel
的lsb中嵌入 bit
的值(可以為0或1)。 這里的pixel
指的是一個特定的值,因此僅指pixel
的紅色,綠色或藍色分量。
bitand(pixel,254) + bit;
此處,遮罩254(或二進制的11111110)將像素的lsb清零。
11010101 // pixel value
and 11111110 // mask
11010100 // result
+ 1 // assuming the value of bit is 1
11010101 // you have now embedded a 1 in the lsb
雖然將1歸零然后再將1嵌入其中似乎是多余的,但直接檢查bit
和pixel
的lsb是否不同並僅在這種情況下進行更改才更直接。
提取 pixel
的lsb值
bitand(pixel,1);
此操作將pixel
lsb以外的所有位清零,從而有效地為其提供值。
11010101 // pixel value; we are interested in the value of the lsb, which is 1
and 00000001 // mask
00000001 // result
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.