これは私の最初の投稿です。誰かが私が始めるのを手伝ってくれることを願っています。それで、私はクラスプロジェクトの画像処理に取り組んできました。Haar 変換関数をゼロから作成することから簡単に始めました。これは非常に簡単で、cameraman.tif などのプリセット画像に適用しました。ただし、そのサンプル画像はグレースケールと正方行列です。
今、私たちは大きな飛躍を遂げ、フィルターを長方形の色付きの画像に適用することになっています。imread(picture)
赤、緑、青 (RGB) を表す 3 つの値を持つ配列マトリックスを作成すると理解しています。また、基本的に言えばfor
、色の各チャンネルを通過するためにループを使用する必要があることも理解しています。ただし、さまざまなチャンネル用に作成して画像を元に戻す方法については、つまずきます。
私はここでいくつかの素晴らしい答えを見て、女性とフルーツバスケットの例を再構築することができましたが、残念ながら、それらはすべてプリセットDWT
機能を使用しているため、使用してはなりません.
最終的なコードは次のようになります: 1) 必要な反復回数をユーザーに尋ねます。
pic = input('What picture would you like? Type "1" for an example or a URL ');
2) ユーザーにしきい値について尋ねる
t = input('Threshold?');
3) ユーザーに反復回数を尋ねる (1-3)
i = input('How many iterations do you want? Choose 1-3. ');
サンプル画像として、長方形のビットマップを選択しました。これはまだ圧縮されておらず、簡単な識別子として「1」を使用しているためです。
if pic ==1;
A = imread ('http://readingeagle.com/BlogUploads/11/Birds%20in.bmp');
else A = imread(pic) ;
end
%[m,n]=Matrix dimensions, c=channels
[m,n,c]=size (A) ;
%plot original
imshow (A);
ここで、しきい値の絶対値の外側の値をゼロに設定しながら、ユーザーが指定した反復回数で Daubchechies Wavelet Transform を実行する必要があります。画像再構築前。
十分な情報を提供できたことを願っています。既に間違っていた場合は修正してください (そうでないことを願っています)。ループを実装してチャネルに対処しようとするたびに、コードが壊れ始めます。参考までに、元の cameraman.tif 画像で機能した Haar 変換を次に示します。
%HWTM - Haar Wavelet Transform Matrix
function W = HWTM(N)
while mod(N,2) ~= 0;
N = N-1;
end
W=zeros(N);
for k=1:N/2
W(k,2*k)=1/2;
W(k,2*k-1)=1/2;
W(N/2+k,2*k)=1/2;
W(N/2+k,2*k-1)=-1/2;
end
end
どうもありがとう!