【C#】補間モード(InterpolationMode)の設定

例えば、画像を縦横2倍に拡大すると画像に隙間が生まれてしまうため、この隙間をどのように埋めるか?の手法を補間と呼び、C#ではGraphicsクラスのInterpolationModeプロパティを設定することで、DrawImageメソッドが補間処理を行ってくれます。

 

■■■
■■■
■■■

↓ x2倍に拡大

■□■□■
□□□□□
■□■□■
□□□□□
■□■□■

 

(コード例)

pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);

using (var bmp = new Bitmap(@"C:\Temp\Parrots.bmp"))
using (var g = Graphics.FromImage(pictureBox1.Image))
{
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
    g.DrawImage(
        bmp,
        new RectangleF(0, 0, 500, 500),
        new RectangleF(170, 100, 50, 50),
        GraphicsUnit.Pixel);
}

デフォルトではInterpolationModeはBilinearに設定されていますが、このInterpolationModeを変えながら実行した結果が以下の通りです。

 

InterpolationMode.NearestNeighbor

 

InterpolationMode.Bilinear

 

InterpolationMode.Bicubic

 

InterpolationMode.Default

 

InterpolationMode.Low

 

InterpolationMode.High

 

InterpolationMode.HighQualityBilinear

 

InterpolationMode.HighQualityBicubic

 

NearestNeighbor、Bilinear、Bicubicの処理アルゴリズムについては、下記ページを参照下さい。

画素の補間(Nearest neighbor,Bilinear,Bicubic)の計算方法

 

処理結果の画像を見ると、私の感覚では

NearestNeighbor→Default、Bilinear、Low→HighQualityBilinear→Bicubic→High、HighQualityBicubicの順で良くなる感じでしょうか??

 

どのモードを使ったら良いか?ですが、画像処理を行う場合は1画素1画素が見えるNearestNeighborがおススメです。描画速度も一番速いと思います。

写真のようなビューアのプログラムではHighQualityBicubicあたり?

 

ここでは画像の拡大の時の比較を行っていますが、縮小のとき、Bicubicでは25%以下のとき、Bilinearでは50%以下のとき、適していないとのこと。

(参考)

https://msdn.microsoft.com/ja-jp/library/system.drawing.drawing2d.interpolationmode(v=vs.110).aspx

 

画像処理のためのC#テクニックへ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください