私のタスク
1. [1][-1] のような haar フィルタがあります
2. 次のような画像があります
- [a][b][c][d]
- - [e][f][g ][h]
3. 画像に対してウェーブレット変換を実行し、次の結果を得たいと考えています。
- - ステップ 1:
- - - [mean(a,b)][mean(c,d)][ab][ cd]
- - - [mean(e,f)][mean(g,h)][ef][gh]
- - 名前の変更: --- わかりやすく表示するためだけに
- - - [a'][b'] [c'][d']
- - - [e'][f'][g'][h']
- - ステップ 2:
- - - [平均(a',b')][a'-b '][c'][d']
- - - [mean(e',f')][e'-f'][g'][h']
4. ステップ 2 の結果は、私が望むものです。
質問
ウェーブレット アプリケーションに関するツールボックスが Matlab にあることがわかりました。
このコマンドを使用しました [cA,cH,cV,cD] = dwt2(I,'haar'); 出力 cV は近いですが、私が望むものではありません。
そのため、Matlab で自分のタスクを簡単な方法で実行するにはどうすればよいかをお尋ねしたいと思います。つまり、このタスクを実行するためにいくつかの組み込みツールを使用できるということです。
私のやり方
function haar_wavelet(input_im)
I = imread(input_im);
I = rgb2gray(I);
I = imresize(I,[512 512]);
[I_row,I_col]=size(I);
if(mod(I_col,2))
I_col=I_col-1;
end
haar_mask = make_haar(I_row,I_col);
I=double(I);
new_M = I(:,1:I_col);
j=2;
i=I_col;
while(I_col/j ~= 2)
i = [i I_col/j];
j = j*2;
end
for k = i
new_M(:,1:k) = my_haar_trans(new_M(:,1:k),haar_mask(:,1:k));
end
figure
imshow(new_M)
end
function [output_haar] = make_haar(row,col)
output_haar=ones(row,col)*2;
for i = 2:2:col
output_haar(:,i)=output_haar(:,i)*0;
end
output_haar=output_haar-1;
end
function [output_M] = my_haar_trans(target_M,mask)
temp_diff=target_M.*mask;
[diff_row,diff_col]=size(temp_diff);
diff_M=zeros(diff_row,diff_col/2);
for i = 1:diff_col/2
diff_M(:,i)=temp_diff(:,2*i-1)+temp_diff(:,2*i);
end
mean_M=zeros(diff_row,diff_col/2);
for i = 1:diff_col/2
mean_M(:,i)=target_M(:,2*i-1)+target_M(:,2*i);
end
output_M=[mean_M diff_M];
end
これは私がやっていることですが、もっと簡単な方法はありますか?