필터 지우기
필터 지우기

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

조회 수: 14 (최근 30일)
佳之助
佳之助 2023년 6월 16일
답변: Kojiro Saito 2023년 6월 16일
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);

답변 (1개)

Kojiro Saito
Kojiro Saito 2023년 6월 16일
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);

태그

제품


릴리스

R2023a

Community Treasure Hunt

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

Start Hunting!