使用Scilab减少图像的bpp

时间:2014-02-27 12:21:05

标签: image-processing scilab

大家好,

我正在尝试使用Scilab将灰度图像上的每像素位数减少到8以下

  • 这可能吗?
  • 如果是这样,我该怎么做?

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为这是不可能的。 Scilab中可用的整数类型是一个或多个字节,请参阅类型here

如果您想要丢失高频信息,可以移出信息。

伪实现

for x=1:width
    for y=1:height

        // Get pixel and make a 1 byte integer  
        pixel = int8(picture(x,y))

        //Display bits
        disp( dec2bin(pixel) )

        // We start out with 8 bits - 4 = 4 bits info
        bits_to_shift = 4
        shifted_down_pixel = pixel/(2^bits_to_shift)

        //Display shifted down
        disp( dec2bin(shifted_down_pixel))

        //Shift it back
        shifted_back_pixel = pixel*(2^bits_to_shift)
        disp( dec2bin(shifted_back_pixel))

        // Replace old pixel with new
        picture(x,y)  = shifted_back_pixel
    end     
end

当然,你可以通过一个大的矩阵操作更快地完成上面的代码,但它是为了展示这个概念。

工作示例

rgb = imread('your_image.png')

gry = rgb2gray(rgb)
gry8bit = im2uint8(gry)

function result = reduce_bits(img, bits)    
    reduced = img / (2^bits);
    result = reduced * (2^bits);
    return result;
endfunction

gry2bit = reduce_bits(gry8bit, 6)
imshow(gry2bit)