MATLAB Answers

png形式の画像をi​mreadで読み込も​うとするが、R成分し​か読み込めない。

29 views (last 30 days)
蓮 中村
蓮 中村 on 25 Jun 2020
Commented: 蓮 中村 on 26 Jun 2020
png形式の画像ファイルをimreadを使用して読み込もうとしているのですが、R成分しか読み込めません。
具体的には、以下の様なコードを実行すると、「インデックスが行列の次元を超えています」と表示されます。
imageRGB = imread('ABC.png')
imageR= imageRGB(:,:,1);
imageG= imageRGB(:,:,2); -----------------------------ここ
imageB= imageRGB(:,:,3);
実際にwhos imageRGBを行っても、Sizeが6814×4768だけとなっており、R成分しか読み込めてないことが確認されました。
これを、windowsのペイントでbmp24ビット形式に変換すると、問題なくG,B成分も読み込めます。画像が大量にあるため、全て変換するのは困難なので、png形式のまま3平面とも読み込む方法はありますでしょうか。
ちなみに、imfinfoを行うと以下の様に表示されます。
Filename: '/home/rnakamura19/matlab_src/samples/Sample/20190123/Gra_x0.bmp_1.png'
FileModDate: '24-Jun-2020 18:54:37'
FileSize: 36363
Format: 'png'
FormatVersion: []
Width: 4768
Height: 6814
BitDepth: 8
ColorType: 'indexed'
FormatSignature: [137 80 78 71 13 10 26 10]
Colormap: [35x3 double]
Histogram: []
InterlaceType: 'none'
Transparency: 'none'
SimpleTransparencyData: []
BackgroundColor: 1
RenderingIntent: []
Chromaticities: [0.3127 0.3290 0.6400 0.3300 0.3000 0.6000 0.1500 0.0600]
Gamma: 0.4545
XResolution: []
YResolution: []
ResolutionUnit: []
XOffset: []
YOffset: []
OffsetUnit: []
SignificantBits: []
ImageModTime: '23 Jan 2019 20:42:04 +0000'
Title: []
Author: []
Description: []
Copyright: []
CreationTime: []
Software: []
Disclaimer: []
Warning: []
Source: []
Comment: []
OtherText: {2x2 cell}

Accepted Answer

Shunichi Kusano
Shunichi Kusano on 25 Jun 2020
こんにちは
ColorTypeを見ると、indexedとなってますのでこちらはインデックス付きの画像です。この場合ファイルの中身はRGBそれぞれの輝度が保存されているわけではなく、各画素にはインデックス(IDみたいなもの)が振られていて、各インデックスには固有のRGBが割当てられています。インデックスとRGBの対応関係はColormapで定義されています。なので、RGB画像にするには、インデックス→RGBの変換が必要になります。なんでこんな回りくどいことをするかというと、たぶんファイルサイズを小さくするためです。
前置きが長くなりましたが、コードとしては次のようになります。
[img,cmap] = imread('test.png'); % index付き画像とカラーマップの読み込み
img = ind2rgb(img, cmap); % rgbに変換
  3 Comments
蓮 中村
蓮 中村 on 26 Jun 2020
わざわざ調べていただき、有難うございます。
教えていただいたページ、参考にさせていただきます。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!