メインコンテンツ

イメージのサイズ変更と縦横比の保持

この例では、幅と高さの比率を維持しながらイメージのサイズを変更する方法を示します。この例では、次の 2 つの一般的な状況を取り上げます。

  1. イメージのサイズを変更し、正確な高さまたは幅を指定する。

  2. 幅と高さが最大値を超えないように、イメージのサイズを可能な限り大きくする。

まず、イメージを読み取って表示します。

I = imread("lighthouse.png");
imshow(I)

Figure contains an axes object. The hidden axes object contains an object of type image.

イメージのサイズを取得します。このイメージの縦横比は 3:4 です。つまり、幅は高さの 3/4 です。

[heightI,widthI,~] = size(I)
heightI = 
640
widthI = 
480

指定した高さへのイメージのサイズ変更

イメージの目的の高さを指定します。

targetHeight = 300;

イメージの出力サイズを指定し、イメージをサイズ変更します。targetSize の 2 番目の要素が NaN であるため、imresize は縦横比を維持するために必要な行数を自動的に計算します。

targetSize = [targetHeight NaN];
J = imresize(I,targetSize);
[h,w,~] = size(J)
h = 
300
w = 
225
imshow(J)

Figure contains an axes object. The hidden axes object contains an object of type image.

指定した幅へのイメージのサイズ変更

イメージの目的の幅を指定します。

targetWidth = 300;

イメージの出力サイズを指定し、イメージをサイズ変更します。targetSize の最初の要素が NaN であるため、imresize は縦横比を維持するために必要な列数を自動的に計算します。

targetSize = [NaN targetWidth];
K = imresize(I,targetSize);
[h,w,~] = size(K)
h = 
400
w = 
300
imshow(K)

Figure contains an axes object. The hidden axes object contains an object of type image.

最大サイズ内でのイメージのサイズ変更

幅と高さが最大値を超えないように、イメージのサイズを可能な限り大きくすることができます。

イメージの最大寸法を指定します。

maxHeight = 256;
maxWidth = 256;

より大きなスケーリング係数が必要なのはどちらの寸法かを判定します。

scaleWidth = widthI/maxWidth
scaleWidth = 
1.8750
scaleHeight = heightI/maxHeight
scaleHeight = 
2.5000

最大イメージ寸法に収めるために高さまたは幅のどちらにより大きなスケール係数が必要かに基づいて、出力サイズを選択します。より大きなスケール係数が必要なのが高さだった場合は、ターゲットの高さを maxHeight として指定します。反対に、より大きなスケール係数を必要とするのが幅だった場合は、ターゲットの幅を maxWidth として指定します。imresize は、縦横比を保持するために他の次元のサイズを自動的に計算します。

if scaleHeight>scaleWidth
    targetSize = [maxHeight NaN];
else
    targetSize = [NaN maxWidth];
end

イメージの出力サイズを指定し、イメージをサイズ変更します。

L = imresize(I,targetSize);
[h,w,~] = size(L)
h = 
256
w = 
192
imshow(L)

Figure contains an axes object. The hidden axes object contains an object of type image.

参考

トピック