画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
プロフィール

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

翻訳(Translate)

ブログ内検索


カテゴリ

最近のコメント

カレンダー

06 | 2012/07 | 08
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

- PR -



最近の記事
(07/16)  2012年6月人気記事Top5
(06/11)  2012年5月人気記事Top5
(05/08)  2012年4月人気記事Top5
(04/06)  ユニークアクセス100万達成!
(03/19)  2012年2月人気記事Top5
(02/16)  2012年1月人気記事Top5
(01/16)  2011年12月人気記事Top5
(06/13)  引越し状況報告(6月)
(03/21)  ブログを引っ越します。
(02/19)  【C#】マウスホイールで画像の拡大縮小
(02/19)  【C#】マウスホイールイベントの追加方法
(02/11)  【.NET】Graphicsオブジェクトのアフィン変換(グローバル変換)
(02/07)  アフィン変換
(01/29)  画像処理ソリューションWeb版を公開しました。
(01/07)  アメトーク(2011.01.07)の家電芸人スペシャルで紹介されていた製品
(12/20)  【OpenCV2.2】Windows7(64bit)でUSBカメラが動作せず
(12/19)  【C++/CLI】矢印の大きさ変更、任意形状の指定方法
(12/13)  Windowsドライバの削除方法
(12/12)  【OpenCV2.2】新規プロジェクトの作成方法
(12/11)  OpenCV2.2の入手、ダウンロード、インストール、環境設定
(12/11)  国際画像機器展2010に出展しました。
(12/06)  【OpenCV2.2】ライブラリ構成(*.lib,*.hなど)
(12/06)  OpenCV2.2が公開されました。
(11/29)  Kinectの測定例
(11/27)  C#とOpenCVの融合プログラミング
(11/23)  【展示会情報】国際画像機器展2010に出展します。
(11/22)  Kinectサンプルプログラムの実行
(11/22)  Kinectドライバの入手、設定方法
(11/22)  Kinect購入
(11/20)  【OpenCV】IplImageの輝度値を参照、設定する

画素の補間(Nearest neighbor,Bilinear,Bicubic)

メインページ画像フィルタ処理
 

画像を拡大や回転する場合など、画像の画素と画素の間の輝度値を参照する必要が出てきますが、
その参照方法を紹介します。
この画素を画素の間を参照する事を一般に補間
内挿Interpolation)と言います。

 最近傍補間(ニアレストネイバー Nearest neighbor)

 Nearest neighborをそのまま訳すと、最も近いご近所、という事で参照する位置に最も近い位置に
 ある画素の輝度値を参照します。

 Nearest neighborニアレストネイバー

 求める画素間の座標が(x,y)の位置の輝度値を Dst(x,y) とし、もともとの画像の輝度値を

 Src(i,j) とすると

   Nearest neighbor
 で表されます。(ただし、[  ] は小数部分の切り捨てを表します。)
 つまるとこ、座標を四捨五入し、その画素の輝度値を参照します。

 双一次補間(バイリニア補間 Bilinear)

 バイリニア補間では求める位置(x,y)の周辺の2×2画素(4画素)を使って、輝度値を直線的に
 補間して、輝度値を求めます。

 
 直線的に補間する方法は、たとえば下図のようにX座標が180と181の2点間の180.8の
 位置の輝度値を求めるのは、2点の位置の輝度値の比から簡単に求まります。

 Bilinear補間
 
 この処理を手前の2点間、奥の2点間についてX軸方向に補間処理を行い、さらに補間した
 2点の輝度値を用いて、さらにY軸方向に補間処理することで、目的の輝度値を求めます。
 (Y軸方向から先に処理を行っても結果は同じです。)


 ちなみに、このBilinearの接頭語のbi-ですが、『二つの、双方向』というような意味が
 あるそうです。
 ということで、双方向からリニア(直線的)に補間したのが、このBilinearで、次に出てくる
 Bicubicは双方向から三次関数で補間したのが、Bicubicです。

 Bilinear補間
 この補間処理を式で表すと、
 Bilinear補間
 
 となります。


 双三次補間(バイキュビック補間 Bicubic)

 バイキュービック補間では求める位置(x,y)の周辺の4×4画素(16画素)を使って、輝度値を
 三次式で補間して輝度値を求めます。

 Bicubic補間

 この変換を式で書くと
 Bicubic補間
 となります。
 ただし、Src(i,j)は求める座標(x,y)の周辺の輝度値を表し、下図のような配置とします。

 Bicubicの輝度値の配置 

 また、12341234 は求める位置から参照する画素までの距離を表し、

    Bicubic
 
 と定義します。
 関数h(t)はsinc関数(sinc(t) = sin(πt)/
πt) をテイラー展開により三次の項まで近似した関数で

 Bicubic
 だそうで...(詳細は良く分かってません。)
  の値には-1前後がよく用いられます。


 まとめ

 各補間方法を使って、画像を拡大表示すると以下のようになります。

 【元の画像】
 内挿補間
 
 赤い四角の部分を拡大表示します。

 【Nearest neighbor】

 Nearest neighbor

 【Bilinear】 
 Bilinear

 【Bicubic】 
 Bicubic

 これらの画像を見ても分かるようにNearest neighborBilinearBicubicの順でギザギザなのが
 なめらかに拡大表示されます。

 この変換を1次元的に輝度値のグラフで見てみると
  内挿補間
内挿補間
内挿補間

 となります。
 ここで注意しないといけないのが、Bicubic補間がおおむね滑らかに輝度値を補間することが
 できますが、最後のグラフを見ても分かるように、輝度値が
オーバーシュート(アンダーシュート)ぎみ
 になる場合があります。その場合は補間の式の  の値を -0.2 程度のよりに近い値に
 すると回避することができます。 

Loading...

この記事に対するコメント
Bilinearの変換式を修正しました。
このBiLinearの変換式は『ディジタル画像処理』という本を参考に書いたのですが、この変換式がちょっと違ってたようで、式を修正しました。
ご迷惑をおかけしました。
【2011/02/09 21:41】 URL | Akira #- [ 編集]

Re: bicubic
yu-kiさん、ご指摘頂きありがとうございます。
結論からすると、行列の部分はhxとhyは逆ではなく、4x4の行列の部分をSrc(j, i)としていたので、合っていたと思われます。(ただの強がりです...)
しかし、添字の図もソバに書いてあるので、分かりづらいですよね?
ということで、xとyに関する部分を全て入れ替えました。
これで、合っていますよね?

>> h[t]=(-a|t|^3-5a~・・  でなく h[t]=(a|t|^3-5a~・・
という部分は、素直に間違いを認めてしまいます。申し訳ありません。

本文も直しておきましたので、確認して頂けると幸いです。
【2010/07/09 00:08】 URL | Akira #- [ 編集]

bicubic
わたくし,大学の研究に相互関法を使うので,いつも楽しく拝見させいただいております.
bicubicの式に間違いがあるようなので投稿させていただきました.
Dst(x,y)=~  のマトリックスでhxとhyが逆なのと,
h[t]=(-a|t|^3-5a~・・  でなく h[t]=(a|t|^3-5a~・・ 
のようです.実際にプログラミングしてから気づきました(笑)



【2010/07/08 22:54】 URL | yu-ki #SFo5/nok [ 編集]


この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://imagingsolution.blog107.fc2.com/tb.php/142-04305e76
この記事にトラックバックする(FC2ブログユーザー)

現在の閲覧者数: / 合計