imread による以下のプログラムで I_cr = imcrop(I, [125, 64, 536, 482]); で画像を切り抜き後 の処理で発生するエラー回避の方法
1 次查看(过去 30 天)
显示 更早的评论
次のプログラムでは、画像密度が大きすぎるためか、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 个评论
回答(2 个)
Shunichi Kusano
2019-8-29
ちょっと試してみたのですが、ご提示のコードできちんと動きました。
もしかすると読み込んだ画像がRGB画像ではないでしょうか。
IがRGB画像だと同じエラーが出ました。必要なレイヤだけを取り出して(I=I(:,:,1)など)処理したところ、きちんと回りました。
0 个评论
Yoshifumi Harada
2019-8-29
1 个评论
Shunichi Kusano
2019-8-29
plot時に起きているエラー解消のため、まずは原因について可能性がありそうなところを一つずつ潰していきたいと思っております。
私の一つ目のコメントの意図としまして、読み込んでいるtif画像が複数のチャンネルを持っていた場合に、同じエラーが起きるようでしたので、そこが原因ではないかと思った次第です。
読み込んだ配列Iの次元数は2になっていますでしょうか。
ndims(I)
で、3と出力されれば、何か1チャンネルだけ取り出して解析にかければ、動作するかと思います。2となった場合は、残念ながら振出しに戻ってしまいます。その際には、画像を添付いただけますと、原因究明のヒントになるかと思います。画像の添付は、テキストフィールドの上にあるクリップマークから行えます。
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Processing Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!