質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

1回答

1206閲覧

MATLABで画像のサイズ変更を行う

退会済みユーザー

退会済みユーザー

総合スコア0

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2017/11/08 07:14

編集2018/10/14 08:39

###前提・実現したいこと
MATLABで画像サイズ変更を行うコードを書いています。

###発生している問題・エラーメッセージ

matlab

1 2imshow(C);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WathMorks

2017/11/08 07:34 編集

「関数を使わずにn倍に変更したコード」は意味をなしていません。 「1, imresize()関数を用いて、画像を3倍にしたコード」で作ったCをそのまま「2,関数を使わずにn倍に変更したコード」のimshowに渡していませんか?
退会済みユーザー

退会済みユーザー

2017/11/08 07:53

コメントいただきましてありがとうございます。コード1と2はそれぞれ別々のファイルで動かしています。わかりにくい明記ですみません。
WathMorks

2017/11/08 08:50 編集

2番目のコードにはCが定義されていないので、実行するとエラーが出る「べき」です。 試しに clear C を 2番目のコードの一番上に書いて実行してみてください。 1も2もおそらくファイルを関数化していないでしょう。であれば、1のCはローカル変数にはなっていません。1で作ったCがワークスペースに残っていて、それを2番目のほうが利用しているはずです。 そういうわけで2のコードが動いているように「見える」のです。
退会済みユーザー

退会済みユーザー

2017/11/08 10:06

ご指摘いただきましてありがとうございます。質問を変更させていただきます。
guest

回答1

0

ベストアンサー

画像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におさまっていないときちんと表示されないかもしれません。適当に調整してください。

投稿2017/11/08 11:03

編集2017/11/08 12:03
WathMorks

総合スコア1582

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/09 00:56

参考にいただいたコードで、「Cの画素値が0~1におさまっていないときちんと表示されないかもしれません。」との御説明がありましたが、コードの末尾に figure; imshow(C); を加えて実行してみたところ、画像は表示されるのですが、ほとんど全面真っ白で一部分が黄色で表示されるという状況に陥っています。具体的に調整するべきところがわからないのでアドバイスいただけますと幸いです。
WathMorks

2017/11/09 01:15 編集

Cの要素はdouble型なので uint8型にする imshow(uint8(C)) または画素値が0-1に入るように255で割る imshow(C/255)
退会済みユーザー

退会済みユーザー

2017/11/10 02:44

解決しました。 ありがとうございました。大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問