簡體   English   中英

RGB圖像像素轉換成其二進制表示形式

[英]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嵌入其中似乎是多余的,但直接檢查bitpixel的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM