2015-05-15 155 views
1

我正在处理位图深度为24位的800 x 800像素图像(PNG格式)。我假设它意味着3 x 8位。这些图像只是黑色和白色(0或255)。 我想将这个深度降低到8位,因为*,当我在matlab中处理这些图像时,*我创建了一个800 x 800 x 3的矩阵,它比计算2D矩阵的计算成本更大。减少图像位深度

我的想法是在matlab矩阵的第一层子集,但似乎我已经失去了信息,因为我没有在我的矩阵中留下任何东西。

`Im4=Im4(1:800,1:800);` 

任何想法?

我新的图像处理,我可能不知道的基本知识......

+0

Matlab可以并且确实以'double'格式保存图像,这意味着它在存储它们时的位深度并不重要(它很重要,但matlab会处理它)。除非每个像素的24位实际上不是位深度,而是3RGB通道的颜色,否则它肯定不会创建800x800x3矩阵。 –

回答

1

rgb2gray可能是一个M-N×3图像转换成M×N的最安全的方式。

+0

但是,OP声称图像是24位深度,而不是RGB!如果他想要改变位深度,那么'gray2ind(I,256)'是解决方案,而不是'rgb2gray'! –

+2

然后,让我们等待来自OP的说明。 – Dima

+1

鉴于答案已被接受,我只能假设它对OP有效? – eigenchris

1

这只是一种替代(因为你在MATLAB图像是新的处理其漂亮的知道不同的方法)

gray_scale = Im4(:,:,1); 

此方法仅适用,因为你的形象已经是灰度(这可能意味着红=绿=蓝色)。代码说的是Im4all rowsall columnschannel 1,并将其存储在名为gray_scale的变量中。RGB图像的通道1是指红色通道。

还有其他的评论是关于rgb图像或24bit灰度。一个简单的方法来检查是采取原始图像(处理前),并输入size(MY_IMAGE_NAME_HERE)这应该给你2个或更多的数字。

  1. 行数
  2. 列数
  3. 如果它的存在给出了信道的数目,彩色图像通常具有3.如果没有,这意味着你有一个二维数组是灰度第三数