最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

グリッド内挿でのイメージのリサンプリング

この例では、griddedInterpolant を使用してイメージ内のピクセルをリサンプリングする方法を説明します。イメージのリサンプリングは、解像度とサイズの調整に便利で、ズーム後にピクセルを滑らかにするために使用できます。

イメージの読み込み

イメージ ngc6543a.jpg を読み込んで表示します。これは、惑星状星雲 NGC 6543 のハッブル宇宙望遠鏡のイメージです。このイメージには、同心性のガスの外郭、高速ガスの噴流、異常なガスの集まりなど、興味深い構造がいくつか表示されています。イメージを表す行列 A は、650 x 600 x 3 の uint8 整数の行列です。

A = imread('ngc6543a.jpg');
imshow(A)

内挿の作成

イメージのグリッド内挿オブジェクトを作成します。イメージの場合は、ピクセルの場所が正の整数であるため、既定のグリッドの使用が適しています。griddedInterpolant は倍精度および単精度の行列に対してのみ有効なため、uint8 行列を倍精度に変換します。

F = griddedInterpolant(double(A));

イメージ ピクセルのリサンプリング

多数のグリッド点を使用してイメージをリサンプリングする場合、内挿をクエリする最善の方法は、"グリッド ベクトル" を使用することです。グリッド ベクトルは、cell 配列 {xg1,xg2,...,xgN} で列ベクトルとしてグループ化されます。グリッド ベクトルを使用すると、クエリ点のグリッドをコンパクトに表現できます。グリッド ベクトルを使用する場合、griddedInterpolant では、フル グリッドを形成しなくとも、計算を実行できます。

元の行列の次元のサイズを求め、その次元サイズを使用して、120% のサイズになるようにイメージをリサンプリングします。つまり、元のイメージの 5 ピクセルごとに、内挿イメージは 6 ピクセルとなります。

[sx,sy,sz] = size(A);
xq = (0:5/6:sx)';
yq = (0:5/6:sy)';
zq = (1:sz)';
vq = uint8(F({xq,yq,zq}));
figure
imshow(vq)
title('Higher Resolution')

同様に、元のイメージより 55% 少ない数の点を使用して内挿をクエリすることにより、イメージのサイズを縮小します。元のイメージ行列にインデックスを付けるだけでも解像度の低いイメージを生成できますが、内挿を使用すると、整数以外のピクセル位置でイメージをリサンプリングできます。

xq = (0:1.55:sx)';
yq = (0:1.55:sy)';
zq = (1:sz)';
vq = uint8(F({xq,yq,zq}));
figure
imshow(vq)
title('Lower Resolution')

ズーム アーティファクトの平滑化

イメージをズームインすると、関心領域のピクセルが徐々に大きくなり、イメージの詳細はすぐに失われます。イメージのリサンプリングを使用すると、このようなズーム アーティファクトを滑らかにすることができます。

元のイメージの中央にある明るいスポットをズームインします (A にインデックスを付けると、この明るいスポットがイメージの中心となり、その後ズーム操作してもフレームの外に押し出されることはありません)。

imshow(A(1:570,10:600,:),'InitialMagnification','fit')
zoom(10)
title('Original Image, 10x Zoom')

内挿 F をクエリして、(およそ) 10 倍高い解像度でズームされたイメージを再生成します。複数の異なる内挿法の結果を比較します。

xq = (1:0.1:sx)';
yq = (1:0.1:sy)';
zq = (1:sz)';
figure
F.Method = 'linear';
vq = uint8(F({xq,yq,zq}));
imshow(vq(1:5700,150:5900,:),'InitialMagnification','fit')
zoom(10)
title('Linear method')

figure
F.Method = 'cubic';
vq = uint8(F({xq,yq,zq}));
imshow(vq(1:5700,150:5900,:),'InitialMagnification','fit')
zoom(10)
title('Cubic method')

figure
F.Method = 'spline';
vq = uint8(F({xq,yq,zq}));
imshow(vq(1:5700,150:5900,:),'InitialMagnification','fit')
zoom(10)
title('Spline method')

参考

|

関連するトピック