MATLAB Answers

0

imread による以下のプログラムで I_cr = imcrop(I, [125, 64, 536, 482]); で画像​を切り抜き後 の処理​で発生するエラー回避​の方法

Asked by Yoshifumi Harada on 29 Aug 2019
Latest activity Commented on by Shunichi Kusano on 29 Aug 2019
 次のプログラムでは、画像密度が大きすぎるためか、plot 時次のエラーが発生します。
 ERROR:
 >データの次元数を 2 より大きくすることはできません。エラー: Sq245_image_0816 (line 30) データの次元数を 2 より大きくすることはできません。
 >エラー: Sq245_image_0816 (line 30) 、 plot(trapz(Yx,2))、plot(trapz(Yx,2))
 FFT2, x方向、 y方向の積分を含む 過去に行なった、結果では問題なく S(K) のスペクトルの図形表示まで成功しております。
 >データの次元数を 2 より大きくすることはできません。 
これを回避するためには元画像 を圧縮や固定化するか、何らかの方法がありるはずです。お教え下さいますよう宜しくお願い致します。
以下にプログラムと元画像を添付致します。
    close all
clc
I = imread('Anas_051.tif');
%[J, rect] = imcrop(I);
I_cr = imcrop(I, [125, 64, 536, 482]); % 切り抜き
imshow(I_cr) % 切り抜いた箇所を表示
% -- 処理 ---------------------------------
I_db = double(I_cr); % FFTを行うため、uint8型からdouble型に変換
Y = fft2(I_db); % 2D-FFT
Ys = fftshift(Y); % 直流成分を中心にシフト
Yx = 20 * log10(abs(Ys)); % 対数に変換
% -- 表示 ----------------------------------
figure
imagesc(Yx) % 強度データを表示
colormap(gray)
axis square
%xlim([100,300]) % X軸の表示範囲の設定
%ylim([150,300]) % Y軸の表示範囲の設定
% ---------------- 追加 ---------------------
figure
plot(trapz(Yx,2))
title('X方向の積分')
figure
plot(trapz(Yx,1))
title('Y方向の積分')
 __________________________________________________________
画像のコピーは出来ませんでしたが、元画像の転送方法を教えてください。以
     
  

  0 Comments

Sign in to comment.

2 Answers

Answer by Shunichi Kusano on 29 Aug 2019

ちょっと試してみたのですが、ご提示のコードできちんと動きました。
もしかすると読み込んだ画像がRGB画像ではないでしょうか。
IがRGB画像だと同じエラーが出ました。必要なレイヤだけを取り出して(I=I(:,:,1)など)処理したところ、きちんと回りました。

  0 Comments

Sign in to comment.


Answer by Yoshifumi Harada on 29 Aug 2019

 草野様 ご回答有難うございました。 
私の質問は S(K)スペクトルの計算時の問題です。
RGB ではなく 以下のように、プログラム 1行目では .tif 画像です。
I = imread('Anas_051.tif');
%[J, rect] = imcrop(I);
I_cr = imcrop(I, [125, 64, 536, 482]); % 切り抜き
imshow(I_cr)
 お答え頂きたいのは画像を解析時につぎのエラーがでています。
このエラーを解除する方法を教えて下さい。
エラー: plot
データの次元数を 2 より大きくすることはできません。
エラー: Sq245_image_0816 (line 30)
plot(trapz(Yx,2))
   以上 宜しく

  1 Comment

plot時に起きているエラー解消のため、まずは原因について可能性がありそうなところを一つずつ潰していきたいと思っております。
私の一つ目のコメントの意図としまして、読み込んでいるtif画像が複数のチャンネルを持っていた場合に、同じエラーが起きるようでしたので、そこが原因ではないかと思った次第です。
読み込んだ配列Iの次元数は2になっていますでしょうか。
ndims(I)
で、3と出力されれば、何か1チャンネルだけ取り出して解析にかければ、動作するかと思います。2となった場合は、残念ながら振出しに戻ってしまいます。その際には、画像を添付いただけますと、原因究明のヒントになるかと思います。画像の添付は、テキストフィールドの上にあるクリップマークから行えます。

Sign in to comment.