前々から追加追加しようと思って、初めて作ってみた。

日本語の資料がtpotさんのバイラテラルフィルタしかなくて、勉強するのが大変でした。
海外のサイトはもっとよくわかんない謎の式だらけ。

要約すると、バイラテラルフィルタってのは、注目画素の輝度と、フィルタ処理する時の近傍画素の輝度の差(距離)を
マイナスの係数をかけて、指数関数の中れたもの を A として。 新しいオペレータ = ( A × 普通のフィルタ処理)
新しいオペレータは、係数の合計が1になってないと思うから、正規化して計算しなくてはいけない。
あとは、この新しいオペレータを使って普通のフィルタ処理を行えばOK。
つまり2回色を参照しないといけない。1回目は輝度の距離の計算。2回目はフィルタ処理。

あと、メニューのフィルタをもうノイズ低減エッジ強調の2つにまとめてみた。
今更だけど、大きな画像(今時のデジカメサイズ)の画像処理しようとすると、
Javaがメモリ確保できないとかでエラー出る・・・

一応開発PCはメモリ2Gあるのに、写真の画像処理が出来ないとかヤバイ・・・
起動時にメモリの量を指定することで解決(。>ω<)


2009年7月28日 追記

今色々調べてみると、バイラテラルフィルタの公式が。

あれ、できたソースコードとだいぶ違うような……。(^○^)

というか正規分布に、注目画素と周りの画素との距離(差)を利用したというか、
もともとガウシアンフィルタが正規分布を元にして作ってるから、

説明としては、「画素の色差情報[m~2+n~2]」と「画素の距離情報[(f(i,j)-f(i+m,j+n))~2]」を利用するであっていると思います。
分母に似たような式があるのは、フィルタを正規化するためです。

ちなみに正規分布はこちら。

ガウシアンフィルタのフィルタ係数を作る時に利用するのですが、
フィルタの合計は1に正規化する必要があるので、
expの外に出ている係数は計算せずにフィルタ係数を求めたあとに、正規化します。
外の係数は、次のように正規化したら消えてしまいます。
←基本形

つまり、バイラテラルフィルタを簡単に説明すると
ガウシアンフィルタに「注目画素と周りの画素との色差」の情報を加味したものです。


完成した画像処理のツールは、こちらから試すことが出来ます。

関連記事

  • Javaで3Dゲーム開発日記 part5 画像補間Javaで3Dゲーム開発日記 part5 画像補間 以前の続きでテクスチャのパーリンノイズの補間法の話です。 いい加減補間について調べようといろいろとプログラムして作ってみました。 テクスチャなので、上下と左右が繋がるように補間します。 8x8px → 256x256px […] Posted in ゲーム制作
  • Bresenhamアルゴリズムで線分の計算は早いのかなBresenhamアルゴリズムで線分の計算は早いのかな 以前、直線を描くのにこんなのを作った。 特に工夫点もない、素直な方法である。 #module "linem" #deffunc line2 int line_x1,int line_y1,int line_x2,int line_y2 line_xabs = abs(line_x1-line_x2) line_yabs = […] Posted in アルゴリズム
  • SMFプレイヤーをつくろう!リベンジ「セットテンポと分解能」SMFプレイヤーをつくろう!リベンジ「セットテンポと分解能」 以前(2007/4/30)、HSPでMCI(Media Control Interface)を利用せずに SMF(スタンダードMIDIファイル .mid)を再生するためのモジュールを作ってSMFプレーヤーを作りました。(ここ) しかし実はこれには色々と問題が山積みになっていたりする。 1. なんかメタイベント,SysExイベントが正常に送れていないっぽい? 2. […] Posted in ツール制作
  • 「BufferedImage」の TYPE_4BYTE_ABGR から TYPE_INT_ARGB にする方法「BufferedImage」の TYPE_4BYTE_ABGR から TYPE_INT_ARGB にする方法 Java の BufferedImage は getType() を使うことでタイプを知ることが出来ます。 byte型でABGRの順に記録されている場合は、BufferedImage.TYPE_4BYTE_ABGR int型でARGBが記録されている場合は、BufferedImage.TYPE_INT_ARGB になります。 TYPE_4BYTE_ABGR […] Posted in プログラミング
  • 指定した秒数で区切るツール Simple Wave Splitter指定した秒数で区切るツール Simple Wave Splitter Simple Wave Splitter wavファイルを指定した秒数で区切るツールを公開しました。 JRE がインストールされた環境で利用できます。 デフォルトは、10秒+モノラルになっています。 使い方 1. […] Posted in ツール制作
  • RSA暗号の解説に出てくる数値の逆数のmodRSA暗号の解説に出てくる数値の逆数のmod RSA暗号に紹介には、必ず次のような式がでてきます。 これ 今日は、この式について解説します。 といっても・・・すみません。言い訳になりますが、 数学科出身ではなく、間違ったこというかもしれません。 それをふまえていただいて・・・解説させていただきます。 まず、m = (p - 1)(q - 1) […] Posted in アルゴリズム