「同じ」の畳み込み形状の2Dカーネルの畳み込み行列を生成する


10

特定の2DカーネルH畳み込み行列を見つけたい。
たとえばImg、サイズがm×n画像の場合、(MATALBで)欲しい:

T * Img = reshape(conv2(Img, H, 'same'), [], 1);

ここで、T畳み込み行列であり、same入力されたサイズと一致した畳み込み形状(出力サイズ)を意味します。

理論的には、Hはテプリッツ行列に変換する必要があります。MATLAB関数を使用していますconvmtx2()

T = convmtx2(H, m, n);

ただし、MATLABはのたたみ込み形状に一致するたたみ込み行列を生成するため、Tサイズは(m+2)(n+2)×(mn)convmtx2ですfull

畳み込み形状パラメーターconv2()との使用に一致する畳み込み行列を生成する方法はありsameますか?


同じ結果のT * Imgを得るためだけに探しているのですか、それとも別の目的でTを使用したいですか?
Charna

私はあなたのコードと数学を編集して、より魅力的に見えるようにしました。これは、将来の質問で自分で行うことができます。ラテックス編集には$$を使用します。
Jav_Rock

回答:


5

私はconvtmx2関数を持っていないため、これをコンピューターでテストできません。MATLABヘルプで次のように述べています。

http://www.mathworks.com/help/toolbox/images/ref/convmtx2.html

T = convmtx2(H,m,n)行列のたたみ込み行列Tを返しますH。場合はXm行n列の行列であり、その後reshape(T*X(:),size(H)+[m n]-1)同様ですconv2(X,H)

これにより、同じ結果のたたみ込みが得られconv2(X,H)ますが、それでも正しいたたみ込み部分を引き出す必要があります。


DSP.SEへようこそ。これは素晴らしい答えです。
Phonon 2012年

分析するために実際の行列が必要になる場合があると思います(随伴演算子、逆行列など)。したがって、この方法は機能しません(行列から行を削除し始めない限り、スパースであるため遅くなります)。
Royi

1

StackOverflow Q2080835 GitHubリポジトリでこれを解決する関数を書きました(を見てくださいCreateImageConvMtx())。
実際、この関数は任意の畳み込み形状をサポートできます- fullsameおよびvalid

コードは次のとおりです。

function [ mK ] = CreateImageConvMtx( mH, numRows, numCols, convShape )

CONVOLUTION_SHAPE_FULL  = 1;
CONVOLUTION_SHAPE_SAME  = 2;
CONVOLUTION_SHAPE_VALID = 3;

switch(convShape)
    case(CONVOLUTION_SHAPE_FULL)
        % Code for the 'full' case
        convShapeString = 'full';
    case(CONVOLUTION_SHAPE_SAME)
        % Code for the 'same' case
        convShapeString = 'same';
    case(CONVOLUTION_SHAPE_VALID)
        % Code for the 'valid' case
        convShapeString = 'valid';
end

mImpulse = zeros(numRows, numCols);

for ii = numel(mImpulse):-1:1
    mImpulse(ii)    = 1; %<! Create impulse image corresponding to i-th output matrix column
    mTmp            = sparse(conv2(mImpulse, mH, convShapeString)); %<! The impulse response
    cColumn{ii}     = mTmp(:);
    mImpulse(ii)    = 0;
end

mK = cell2mat(cColumn);


end

楽しい...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.