質問: ### 前提・実現したいこと MATLABで画像サイズ変更を行うコードを書いています。 ### 発生している問題・エラーメッセージ ``` imshow(C); ```
回答: 画像Iのサイズをn倍にしたければ、まず入れ物を用意します。 ``` [n1,n2,n3]=size(I); m1= round(n*n1); m2= round(n*n2); C = zeros(m1,m2,n3); ``` モノクロ画像であればn3=1, カラー画像であればn3=3 となります。 次に、Iの画素値を使って、Cの要素を埋めていきます。 ただ、ご質問の本質的部分はプログラミングの問題ではなく数学の問題です。 どのような数学的手法によって画素値を「補間」するのかを考えなければいけません。 MATLABのマニュアルを参考に基礎から勉強されることをおすすめします。 数学がわかれば、あとはそれをプログラミングするだけです。どのような言語を使ってもできます。 参考までに一番簡単な方法を示しておきます。これが最善の手法ではないことを断っておきます。 ``` I = imread('dog.jpeg'); I = double(I);% 多分,Iのクラスはuint8だと思うので、doubleに変換した。interp2を使うため。 n=3;%<----------------倍率 [n1,n2,n3]=size(I); m1= round(n*n1); m2= round(n*n2); C = zeros(m1,m2,n3); for i=1:n3 C(:,:,i)=interp2(I(:,:,i),linspace(1,n2,m2)',linspace(1,n1,m1)); end ``` 注意:imagescで表示するときは、Cの画素値が0~1におさまっていないときちんと表示されないかもしれません。適当に調整してください。