> 【解決策】どうすれば問題が解消するか ⇒ 下記のいずれか一方を実施する
im2double 関数を使ってuint8/16 型のイメージデータを double 型のイメージデータに変換する
img = im2double(img); % double 型のイメージデータに変換
もしくは、初めに初期化する outputImage の型を読み込むイメージデータの型に合わせる
outputImage = uint8(ones(size(img))*255); % ホワイトバックグラウンド
> 【原因】これはウェブ版で生じるトラブルなのか、処理上のトラブルなのか不明です。
これは処理上のトラブルで、ウェブ版か否かは無関係です。ones 関数で初期化した outputImage と imread 関数で読み込んだ画像データ img のデータ型が合致していないからです。double 型の outputImage に uint8 型の img を代入すると、1.0 ~ 255.0 の値を取る画素は全部真っ白( RGB なら真っ赤:真っ緑:真っ青の組み合わせ)になってしまいます。
【参考1】(一部)イメージデータ型の値と色の関係
- double 型:(黒) 0.0 ~ 1.0 (白)
- uint16 型:(黒) 0 ~ 65535 (白)
- uint8 型:(黒) 0 ~ 255 (白)
img = imread('peppers.png');
class(img) % RGBのPNGファイルなら uint8 または uint16 型になるはず
outputImage = ones(size(img)); % ホワイトバックグラウンド
class(outputImage) % ones 関数で初期化した行列のデータ型はdouble
outputImage(:,:,:) = img; % インデックスを指定して代入する
class(outputImage) % データ型はdouble 型のまま変わらないが、値は0-255になったので真っ白になる