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

조회 수: 1 (최근 30일)
Yoshifumi Harada
Yoshifumi Harada 2019년 8월 29일
댓글: Shunichi Kusano 2019년 8월 29일
 次のプログラムでは、画像密度が大きすぎるためか、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方向の積分')
 __________________________________________________________
画像のコピーは出来ませんでしたが、元画像の転送方法を教えてください。以
     
  

답변 (2개)

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

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

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!