C#画像処理

【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)の計算方法
画像を拡大や回転する場合など、画像の画素と画素の間の輝度値を参照する必要が出てきますが、その参照方法を紹介します。 この画素を画素の間を参照する事を一般に補間や内挿(Interpolation)と言います。 最近傍補間(ニアレストネイバー ...

 

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

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

 

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

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

 

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

(参考)

InterpolationMode 列挙型 (System.Drawing.Drawing2D)
InterpolationMode 列挙体は、イメージを拡大または回転するときのアルゴリズムを指定します。

 

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

コメント

タイトルとURLをコピーしました