イメージのサイズ変更と縦横比の保持
この例では、幅と高さの比率を維持しながらイメージのサイズを変更する方法を示します。この例では、次の 2 つの一般的な状況を取り上げます。
イメージのサイズを変更し、正確な高さまたは幅を指定する。
幅と高さが最大値を超えないように、イメージのサイズを可能な限り大きくする。
まず、イメージを読み取って表示します。
I = imread("lighthouse.png");
imshow(I)
イメージのサイズを取得します。このイメージの縦横比は 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)

指定した幅へのイメージのサイズ変更
イメージの目的の幅を指定します。
targetWidth = 300;
イメージの出力サイズを指定し、イメージをサイズ変更します。targetSize の最初の要素が NaN であるため、imresize は縦横比を維持するために必要な列数を自動的に計算します。
targetSize = [NaN targetWidth]; K = imresize(I,targetSize); [h,w,~] = size(K)
h = 400
w = 300
imshow(K)

最大サイズ内でのイメージのサイズ変更
幅と高さが最大値を超えないように、イメージのサイズを可能な限り大きくすることができます。
イメージの最大寸法を指定します。
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)
