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

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

■■■
■■■
■■■

↓ x2倍に拡大

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

(コード例)

C# InterpolationMode

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

csharp_InterpolationMode_NearestNeighbor

InterpolationMode.Bilinear

csharp_InterpolationMode_Bilinear

InterpolationMode.Bicubic

csharp_InterpolationMode_Bicubic

InterpolationMode.Default

csharp_InterpolationMode_Default

InterpolationMode.Low

csharp_InterpolationMode_Low

InterpolationMode.High

csharp_InterpolationMode_High

InterpolationMode.HighQualityBilinear

csharp_InterpolationMode_HighQualityBilinear

InterpolationMode.HighQualityBicubic

csharp_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#テクニックへ戻る

シェアお願いします

  • このエントリーをはてなブックマークに追加
関連記事

関連記事

関連記事
スポンサーリンク