1

我想使用 Matlab 将 8 位图像的位深度更改为 4 位、2 位深度。源图像是 8 位和 jpg 文件。我想利用 png 'BitDepth' 参数,所以首先我尝试将图像转换为 png 格式。然后我尝试使用这个参数;但我遇到了错误。如果有一个使用 Java 库的简单解决方案,我也可以。

function [] = changeBitDepth(path, depth)
clear all; close all;
clc;
A = imread(path);
imshow(A);
imwrite(A, '~/Desktop/football.png');
B = imread('~/Desktop/football.png');
imwrite(B, '~/Desktop/bitDepthChanged.png', 'BitDepth', depth);
imfinfo('~/Desktop/bitDepthChanged.png');
4

1 回答 1

4

这是因为标准彩色图像只能有 8 位或 16 位图像。例如,索引图像或灰度图像( png 的 wiki 描述)可以具有不同的位深度。

标准允许索引颜色 PNG 的每个像素有 1、2、4 或 8 位;没有 Alpha 通道的灰度图像允许每像素 1、2、4、8 或 16 位。其他一切都使用 8 或 16 的每个通道的位深度。

你可以这样做:

% convert to indexed image
[IND,map] = rgb2ind(A,32);
% save indexed png
imwrite(IND, map, 'test.png', 'bitdepth', 4);

这里了解 matlab 如何处理索引图像。

于 2012-10-04T09:07:11.617 回答