Filter löschen
Filter löschen

どうしたらエラーが出なくなるでしょうか

14 Ansichten (letzte 30 Tage)
佳之助
佳之助 am 16 Jun. 2023
Beantwortet: Kojiro Saito am 16 Jun. 2023
clear all; clc, close all, imtool close all;
%%1行ずつ順番に実行
%%画像の二値化処理
I = imread('eyedown.png'); %ファイルから画像の読み込み
figure; imshow(I);%別ウィンドウで画像の表示
figure; imhist(I);%%ヒストグラムを表示
k = I>200;%%大小を比較して二値化する
figure; imshow(k);
画像を二値化しようとしています。ただ、9行目を実行すると下記のようなエラーが表示されてしまいます。どのようにしたらよいでしょうか。
次を使用中のエラー: images.internal.imageDisplayValidateParams>validateCData
入力が logical (バイナリ) の場合は 2 次元でなければなりません。
エラー: images.internal.imageDisplayValidateParams (行 30)
common_args.CData = validateCData(common_args.CData,image_type);
エラー: images.internal.imageDisplayParseInputs (行 79)
common_args = images.internal.imageDisplayValidateParams(common_args);
エラー: imshow (行 253)
images.internal.imageDisplayParseInputs({'Parent','Border','Reduce'},preparsed_varargin{:});
エラー: kiso (行 9)
figure; imshow(k);

Antworten (1)

Kojiro Saito
Kojiro Saito am 16 Jun. 2023
I>200を実行したときに、RGBそれぞれの色の配列で輝度値が200より大きいものが1、200以下が0となる、1か0かのlogical配列が作られます。kのサイズはm行n列×3 (RGB)のlogical配列です。
方法1
エラーメッセージにあるとおり、logical配列をそのままimshowで表示するには、m行n列×1にする必要があります。
ここでは画像peppers.pngを使ったサンプルにしています。
I = imread('peppers.png'); %ファイルから画像の読み込み
figure; imshow(I);%別ウィンドウで画像の表示
figure; imhist(I);%%ヒストグラムを表示
k = I>200;%%大小を比較して二値化する
figure; imshow(k(:,:,1)); % R成分のlogical配列のみ抽出
方法2
他のやり方として、RGB全てのlogical配列を画像表示するにはloglcalからuint8やdoubleなどに型変換すれば実現できます。0と1の輝度値では画像が暗いので、下記のサンプルでは255倍して0か255のdouble型の輝度値にしています。
I = imread('peppers.png'); %ファイルから画像の読み込み
figure; imshow(I);%別ウィンドウで画像の表示
figure; imhist(I);%%ヒストグラムを表示
k = I>200;%%大小を比較して二値化する
figure; imshow(k*255);
方法3
あとは、元のRGB画像をrgb2gray関数でグレースケール画像に変換する方法もあります。
I = imread('peppers.png'); %ファイルから画像の読み込み
I = rgb2gray(I); % グレースケール画像に変換
figure; imshow(I);%別ウィンドウで画像の表示
figure; imhist(I);%%ヒストグラムを表示
k = I>200;%%大小を比較して二値化する
figure; imshow(k);

Tags

Produkte


Version

R2023a

Community Treasure Hunt

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

Start Hunting!