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 ビットのイメージしか使用できないためです。たとえば、インデックス付きの画像やグレースケール画像 ( wiki の png の説明) に対して異なるビット深度を設定できます。

インデックス付きカラー PNG は、標準により、ピクセルあたり 1、2、4、または 8 ビットを持つことが許可されています。アルファ チャネルのないグレースケール イメージでは、ピクセルあたり 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 に答える