• ベストアンサー

MATLAB パワースペクトル

画像から黒のパワースペクトルを出したいのですが、 c=normxcorr2(X(:,:,1),Y(:,:,1)); これだと赤のパワースペクトルが出てしまいます。 b=[0 0 0] c=normxcorr2(X(:,:,'b'),Y(:,:,'b')); とやっても「インデックスが行列の次元を超えています」と、エラーが出てしまいますし・・・ どうやって指定した色のパワースペクトルが出来るか教えてほしいです。 normxcorr2を使う方法でお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

質問の意味がいまいち解りません。 1.normxcorr2はパワースペクトルを求める関数ではないです。  相互相関を求める関数です。 2.スペクトルというのは分光スペクトルの意味ですか?  でもRGBしかないですし、そうだとしたら意味ないですね。 3.スペクトルというのは画像パターン周波数スペクトルの意味ですか?  normxcorr2では求まりません。 4.「黒」って何?  真黒はRBG表現で言うとR=0,G=0,B=0なんで、パワーなんか無いよ?  グレースケールのことかな?

関連するQ&A

  • Matlabで自作関数をオーバーロード

    Matlabの組み込み関数の中には、引数の数や戻り値の数に応じて異なる作用をするものが沢山あると思います。 例えば組み込みのmax関数だと y=max(x) ならxの第一次元にについての最大値を返しますし、 [y,i]=max(x) なら、さらに i に最大値のindexを代入、 一方 x=max(x,y) ならx,yの各要素について大きい方を取った行列を、 x=max(x,[],d) ならxのd次元についての最大化をしてくれます。 質問ですが、そういう関数を自分で作ることは可能ですか? function [z,w]=f(x,y) という風に関数を定義してしまうと、たとえyを関数中で利用しない場合でも、引数yを指定しなければエラーになってしまいます。同じ関数名でも呼び方に応じて異なった操作をさせることはできないでしょうか?

  • matlab計算について

    matlab独学で進めていますが、時間がないのと頭が足りないので 質問させていただきます。 p1=0.1; p2=2.663*10^6; D= 1:10:1000; A=(log(D)+12.7)/1.1; f(D)=(1/power((2*pi),0.5)*1.1*D)*exp(-0.5*power(A,2)); Y=(p/pash*4/3*pi*power((D/2),3))*f(D) plot(D,Y) X軸がD、Y軸がf(D)のグラフを作成したいです。 内部行列の次元は一致しなければなりません。 とエラーが出ます。このエラーの原因を教えてください。 間違いだらけかもしれませんが...ご指摘よろしくお願いします。

  • C言語FFTからのパワースペクトル表示の質問

    手元にはC言語で作成したFFT/IFFTの処理を行うプログラムがあります。FFT,IFFTともに1次元です。 それを使って、図の信号をフーリエ変換し、パワースペクトルを図示できません。 どうすればいいでしょうか? できたら、結果も含めて教えてください。 詳細は画像を張ります。

  • matlabにおける行列の格納

    matlabにおける質問です。 (matlabもとよりプラグラミング初心者です。) 例えばx=[1 2 3;3 4 5]となっているとき for i=1:10 y(1)=i*x end のように、しても、y(1)とxの次元が合わないというエラーが 出ると思います 行列を、このように「i番目」といった添え字のついた変数に 代入するには、どうしたらよいのでしょうか。 初心者のため大変初歩的なことですが、どなたかご教授ください。 とても焦っております。。。

  • ラドン変換を用いた回転・拡大の算出(プログラミング言語はMatlabです。)

    現在、画像I0に対してI1の画像がどれだけ回転・拡大しているのかというのを算出するプログラムを組もうとしていますが、プログラム途中でゆきずまっています。(ただし、I1はI0をアフィン変換した画像です。) はじめに理論から説明して、次に自分が作っている途中のプログラムをお見せしようと思います。 以下理論の説明です。 画像I0(x,y)をアフィン変換した画像をI1(x',y')とすると I0(x,y)=I1(x',y')  (1) x'=s*(x*cosφ-y*sinφ)+Δx   (2) y'=s*(x*sinφ+y*cosφ)+Δy   (3) となります。ここで、s,φ,Δx,Δyはそれぞれ拡大率、回転角、平行移動量とします。  画像それぞれに対して、ラドン変換します。 r0(θ,ρ)=∬I0(x,y)δ(ρ-xcosθ-ysinθ)dxdy   (4) r1(θ,ρ)=∬I1(x',y')δ(ρ-x'cosθ-y'sinθ)dx'dy'   (5) 上の4式をとくと、 r1(θ,ρ)=r0(θ-φ,{ρ-tcos(θ-k)}/s)   (6) t=sqrt(Δx^2+Δy^2)   (7) k=tan^-1(Δx/Δy)   (8) となります。 次に、ラドン変換平面をρ軸方向に一次元フーリエ変換した後にパワースペクトルを計算すると、r0(θ,ρ) , r1(θ,ρ)はそれぞれ  R0(θ,f)=|∫r0(θ,ρ)exp(-j2πfρ)dρ|   (9)  R1(θ,f)=|∫r1(θ,ρ)exp(-j2πfρ)dρ|   (10)      となります。 (5),(9),(10)より、 r1(θ,f)=r0(θ-φ,sf)  の関係が成り立ち、平行移動の影響を取り除けるます。  ここで、 r1(θ,f)=r0(θ-φ,q-λ)    (11) q=ln(f)   (12) λ=-ln(s)   (13) のようにf軸の対数変換を行なうと、拡大、回転の影響がθ、q軸のシフト量として表せます。 これらの理論を踏まえた上で質問が2点あります。 上の対数変換をどうプログラミングすればよいのか分からないのですがどうすればよいでしょうか? あと、はじめのアフィン変換の(2)式ですが、これをプログラムしようとすると拡大率sやらΔx、Δyなどを定義しなくてはならないのですが、これらは最後に求めるもの、あるいは計算途中で必要なくなるものであって、定義のしようがないのですがどうすればよいでしょうか? プログラム言語はMatlabです。プログラミング初心者で至らないところがあると思いますが助言の方よろしくお願いします。 以下、プログラミング途中のものです。 *ラドン変換をハフ変換にかえてあります。 A1=imread('tekubi-small.jpg'); A2=imread('tekubi-small.jpg'); A1=imresize(A1,[128 128]); A2=imresize(A2,[128 128]); B1=rgb2gray(A1);B2=rgb2gray(A2);B2=rot90(B2); 画像B1とをB1を90度回転させたB2とで回転角・拡大率を算出できるか実験しています。 B1=edge(B1,'canny'); B2=edge(B2,'canny'); %ハフ変換 [H, THETA, RHO] = hough(B1); [H2, THETA2, RHO2] = hough(B2); %ハフ変換平面をρ軸方向に一次元フーリエ変換する C1=fft(H,[],1); C2=fft(H2,[],1); %パワースペクトルを計算する C11=abs(C1); C22=abs(C2); というところまでやりました。

  • MATLABを使った三次元座標の回転を求めたい

    二つの三次元座標(X,Y,Z)と(X',Y',Z')の回転および移動距離を求めたいのですが、どのようにして求めることができるのでしょうか?色々行列の本を読んでみたのですが、文系出身だったので内容がきちんと理解できていません。ご指導よろしくお願いします。

  • ベクトル空間について

    次のM2×2(C) cは複素数体 の部分集合は部分空間はであることを示し、その次元を計算せよ。 V=<[x   y  -y  x]/x,yはc> (行列は上2つ、下2つを順に書きました。) という問題です。行列がうまく書けず、つたないですが、わかるかたお願いできないでしょうか。 答えの次元は2でした。単純に4つの行列にわければ、1次独立になるためそれでできると思っていましたが、違うようです。わからないのでぜひおねがいします。

  • 画像処理アルゴリズム

    いちおうC#でやってますが、あくまで考え方、概念、アルゴリズムの回答で構いません 今取りあえず、ある画像の全ピクセルのRGBとHSVデータを配列として持っているとします 色情報[x,y][R]に赤 色情報[x,y][G]に緑 色情報[x,y][B]に青 同様に HSV[x,y][H]にH HSV[x,y][S]にS HSV[x,y][V]にV ここから、配列をfor文で回してもなんでもいいんですが、画像の色情報を取得して 1.単色刷り画像の取得(白、黒、ある色のみで高声された画像、閾値でふるい分け) (黒白赤,黒白薄緑とか) を実現するためにどうすればいいでしょうか? (全部の色を混ぜてその色の彩度で判定・・・しらたちょっと予想と違う検索結果に・・・)

  • MATLAB 行列の抽出

    私はMATLAB初心者なのですが,行列の抽出ができなくて困っております. やりたいこととしては,for文を用いて行列x_r(41×3行列)がode45によって次々と求められるので,そのつどそのつど(i=1のときから1=10のときまで)でx_r(1)の値を新しい行列pに保存していきたいのですが上手くいきません.わかる方がいらっしゃいましたらご教授お願いします. for i=1:10 [t,x_r]=ode45('...',[0.01],x_r); ..... p(:,i)=x_r(:,1); …(1) ..... end 上の(1)のように行列pにi=1~10までのときのそれぞれのx(i)(41×1行列)の値を保存しようとしましたがうまくいきません. p=(x(1)_i=1,x(1)_i=2,x(1)_i=3,・・・・,x(1)_i=10) (41×10行列)(やりたいことのイメージ) エラーメッセージは「添字による代入の次元が一致しません。」と出ています.

  • MATLABで二次元フーリエ変換

    画像処理のプログラムを作成しています。参考にしている参考書は【最新MATLABハンドブック】という本です。この本を参考にして、一次元フーリエ変換のプログラムから画像処理の二次元フーリエ変換のプログラムに変更させたいのですが、fft2のところでエラーが出てしまいます。自分なりにプログラムを書き直してみたのですが、fft→fft2に関数変更する以外にもっと根本的なことが必要なのでしょうか? 作成したプログラムはこれです。 clear;close all;n=256;dt=0.005; t=((1:n)-1)*dt; f=t/dt/dt/n;n2=n/2;n2p1=n2+1; X=imread('001.bmp'); X=rgb2gray(X); X=double(X); [m,n]=size(X); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %calc corresponding index number F=50; index=round(F*dt*n+1);index1=(index-1):(index+1); index2=n+2-index1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %band elminate filter befil=ones(size(X)); befil(index1)=zeros(size(index1)); befil(index2)=zeros(size(index2)); Y=fft2(X);    ←ここでエラーが出ます。 subplot(2,2,1) plot(f,abs(Y)/n2,'r');axis([0 f(n2p1) 0 1]) xlabel('Frequency (Hz)'),ylabel('Magnitude'); title('Original Signal in freq domain'); %%Now apply fft filter in freq domain fftX=fftX.*befil; subplot(2,2,3) plot(f,abs(Y)/n2,'r');axis([0 f(n2p1) 0 1]) xlabel('Frequency (Hz)'),ylabel('Magnitude'); title('filtered Signal in freq domain'); subplot(2,2,2) imaagesc(X),colormap(gray),axis tight; subplot(2,2,4) imagesc(real(ifft2(Y))),colormap(gray),axis tight; 画像の一部分の情報のみを欠落させたいのです。そのためにはバンドエルミネーションフィルタと思ったのですが…もし違うようならご指摘をお願いします。ちなみに001.bmpはカラー画像です。