2009-08-25 5 views
0

私はビットマップイメージコンテキストを持っており、これをぼやけて見せたいと思っています。私が考えることができる最も良いことは、ガウス・アルゴリズムですが、この種のガウス・ブラー・アルゴリズムのように見えますか?あなたはこれに関する良いチュートリアルや例を知っていますか?言語固有のAPIをあまり使用しなくても手作業で済ませれば、言語はそれほど重要ではありません。私。ココアでは、幸運な人はそれについて考える必要はありません、彼らはすでにそこにあるImagefilterを使うだけです。しかし、私はココアタッチでこのようなことはしません(objective-c、iPhone OS)。ぼかしガウスアルゴリズムはどのように見えますか?実装例がありますか?

答えて

4

これは実際には非常に簡単です。フィルタパターン(フィルタカーネルとも呼ばれます) - 係数を持つ(小さな)長方形の配列 - があり、画像とパターンのconvolutionを計算するだけです。

for y = 1 to ImageHeight 
    for x = 1 to ImageWidth 
    newValue = 0 
    for j = 1 to PatternHeight 
     for i = 1 to PatternWidth 
     newValue += OldImage[x-PatternWidth/2+i,y-PatternHeight/2+j] * Pattern[i,j] 
    NewImage[x,y] = newValue 

このパターンは、2次元のガウスカーブまたは好きなフィルタパターンです。フィルタパターンは画像の外側に部分的に存在するため、画像の端に注意する必要があります。このピクセルがbalckであると仮定するか、イメージのミラー化されたバージョンを使用するか、それとも妥当であるかは分かります。

最後に、フーリエ変換を使用して畳み込みを計算するより高速な方法がありますが、この単純なバージョンは最初のテストで十分であるはずです。

+0

私はこの例に従っていますが、次の方法でピクセル画像にアクセスします: 'pImg [i * iWidth + j] = currentPixel'' i'と 'j'はネストされたforループの変数です。パターンを使って 'newValue + = OldImage [x-PatternWidth/2 + i、y-PatternHeight/2 + j] * Pattern [i、j]'と 'NewImage [x、y] = newValue'という行をどのように変更すればいいですか?私はピクセルを読み取る方法? – evanhaus

1

Wikipedia articleには、対象に関するいくつかの標準情報に加えてサンプルマトリックスがあります。

+0

この7 * 7マトリックスを4 * 4マトリックスのココアタッチCALayer変換マトリックスに移植する方法はありますか? –

+0

No.変換マトリックスは、座標変換(並進、回転など)を行うためのものです。畳み込み行列(ピクセル値を混合するために使用される)とは関係ありません。 –

1

画像処理に最適な場所はTHISです。 MATLABコードがそこに得られます。
そしてthis Wolfram demoは手作業による疑問を解決するはずです。

あなたがあまりにも多くのことを学びたくなければ、PIL(Python Imaging Library)を学んでください。

Here」が必要なものです。上記のリンクからコピー

コード:

import ImageFilter 

def filterBlur(im): 

    im1 = im.filter(ImageFilter.BLUR) 

    im1.save("BLUR" + ext) 

filterBlur(im1) 
+0

PILは本当にiPhone上で動作しますか? (私はiPhoneを持っていない、私はちょうど興味がある) – Niki

+0

私は知らない。私はiPhoneを持っていません。 :-D –

+0

iPhoneは対話型です。私はそのpythonのものについてはわからないが、私はそれがそこに実行されないと言うだろう。私が間違っているなら私を訂正してください。 –

関連する問題