Matlabで写真の絵をのせる方法

このQ&Aのポイント
  • Matlabでsurfに写真の画像をのせる方法を教えてください。
  • 現在、RGBのデータを変換してsurfで出力していますが、色が近くなりません。
  • 他の方法で同じような画像を載せる方法を教えてください。
回答を見る
  • ベストアンサー

matlabでsurfに写真の絵をのせる方法。

matlabでsurfに写真の画像をのせる方法を教えてください。 現在でRGBのデータを [X,map]=rgb2ind(a,65536); で変換し、 X=double(X)+1; surf(huta,X); colormap(map) で出力しているのですが、色が全く近くなりません. [X,map]=rgb2ind(a,65536);X=double(X); image(X) colormap(map) で出力したのと、ほぼ同色の画像が上に載る事になります。 [X,map]=rgb2ind(a,65536);X=double(X)+1; image(X) colormap(map) で出力したのと同じ様な画像を載せたいのですが方法を教えてください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.2

■質問  > 色が全く近くなりません ■#1  > 荒いデータになってしまう どっちでしょうか? 荒くなっているだけであれば、surfaceで以下のプロパティを指定してみると良いかもしれませんね。  'FaceColor', 'texturemap'  'EdgeColor', 'none'  'CDataMapping', 'direct' 詳しくは↓を参照してください。 http://sauron.civil.eng.osaka-cu.ac.jp/~mori/computer/manual_matlab/r13/jhelp/techdoc/ref/surface.html

kou1495
質問者

お礼

返答有難うございます. 問題は解決いたしました、 ページを見て  'FaceColor', 'texturemap' は指示していたのですが  'CDataMapping', 'direct' を指示していなかった事が大きな原因だったもようです 本当にありがとうございました

その他の回答 (1)

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.1

hutaがどういうデータなのか知りませんが、surf()を使う場合は、  surf(z)    z=X  surf(x,y,z)  z=X  surf(x,y,z,c) c=X あたりのどれかにしなければ上手く行かないんじゃないでしょうか? 詳しくは下記URLを参照してください。 http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/surf.shtml

kou1495
質問者

お礼

回答ありがとうございます。 しかしhutaに三次元データを仕込んでいるので範囲指定をしなくてもsurf(huta,X)でd=size(huta);surf(1:d(1),1:d(2),huta,X)と、同等のデータが出力される事は確認しました。 そのために行いたいのは、image(X);colormap(map);では元のデータが取れているのに、それをsurfに貼付けようとすると、荒いデータになってしまうのが問題のため その解決策が今求めている物です。

関連するQ&A

  • MATLABの使い方

    matlabを使って、画像の色を自分で変えるプログラムを作成したいです。 カラーマップを使うのは分かるんですが、その中のrgBを使った作成方法を教えてください。 宜しくお願いします。

  • 【Matlab】画像として保存するとplot3による点が消えてしまう

    【Matlab】画像として保存するとplot3による点が消えてしまう ----------------------------------------------------------------------------------- 最近Matlabを使用し始めた初心者です。よろしくお願いします。 surf出力とplot3による点が見える形で画像を出力したいと思っています。 画像はグラフを真下からのぞいたものとし、自動的に保存したいです。 自分の稚拙なプログラムではどうしてもプロットによる点が現れません。 対策をご教授いただきたいです。 プログラムの内容は、 二次元データをcsvから読み込み、surfで出力、 またデータ上のある座標での出力をplot3で点として表示するという流れを意図しています。 'Figure'ウィンドウ上(.fig)ではplot3で出力された点が表示されるのですが 画像(bmp,tiffで出力してみました)として出力した場合その点が消えてしまいます。 mファイルのプログラム、環境は以下のようになっています。 function test_show_graph(csvfilename) %------------------------------------ z = csvread(csvfilename); [height, width] = size(z); [x,y] = meshgrid(0:0.1:(height*0.1)); h_surf = surf(x,y,z); hold on zi = interp2(x,y,z,4,4, 'cubic'); plot3(4.0,4.0,zi+10,'.r','MarkerSize',30); plot3(4.0,4.0,zi-10,'.r','MarkerSize',30); hold off view([0, -90]); saveas(h_surf, 'test', 'tiff'); %Matlab&Simulink R2008a %WindowsVista SP1 %Dell StuioXPS(Intel Core i7) surfの表面に隠れて点か見えなくなっていると思い、 表面の上下に突き抜けるようにlineを出力してみたりしてみましたがダメでした。 駄文となり申し訳ありません。 皆様の知識をお借りできれば幸いです。

  • Matlabのcapture

    Matlabで,表示させたFigureのコピーを作成して,そのファイルを保存する操作を行うcaptureについての質問です.Matlab7.5.0(R2007b)を使っています. 下記サイトには参考コードとして [X,map] = capture(2); imwrite(X,map,'fig2.tif') がありました. しかしこの上の行のcapture(2)の2をFigure 1や単に1などに変更してみても(現在Figure 1を表示させているためです.), ??? 未定義の関数、またはメソッド 'capture' (タイプ'double' の入力引数)。 などというエラーが出てしまいます. どのような操作を行えば良いのでしょうか? どうぞよろしくお願いいたします. http://infoshako.sk.tsukuba.ac.jp/InfoRes/jdoc/MATLAB5/jhelp/techdoc/umg/umg.html http://infoshako.sk.tsukuba.ac.jp/InfoRes/jdoc/MATLAB5/jhelp/techdoc/umg/chprin31.html

  • MATLABのプログラミングについてご質問です(2)

    MATLAB初心者です。 現在、以下の環境を使っています。 ------------------------------- OS:Windows XP MATLABのバージョン:R2007a ------------------------------- 以下の内容をプログラムでどう組み込めばよいのか分らないため、質問させて頂きました。 詳しい方、ご教授のほどお願いします。 (1)例えば「512x512」サイズの画像を figure に表示させ、その画像の中点を表示させる方法  (画像の中点に「×」マークをつけるイメージです) (2)上記の画像からマウスを使って、座標の始点と終点をクリックしたら"□"(選択範囲)の枠が表示される方法  (マウスを使って画像サイズを小さくしたいのが目的です) (3)上記の画像からマウスを使って、クリックした場所の座標(x軸、y軸)を figure に表示させる方法   (4)uigetdir からディレクトリ選択画面を表示して、指定したディレクトリの絶対パスを取得する方法 (5)画像データを imwrite する時、指定したパス(ディレクトリ)に出力する方法 全てでなくても、判る範囲までのご回答でもかまいません。 よろしくお願いします。

  • MatlabによるRGB空間からYUV空間への変更について.

    現在Matlabを勉強中の者です. 160*120ピクセルの画像の色空間を RGBからYUV(YCbCr)へ変換するプログラムを考えているのですが, 以下のソースコードで大まかな点はあっているでしょうか? 実際にYUVへ変換後,画像を表示したところ, 元画像とは色調が変わってしまい頭を抱えています. 画像を表示する際のカラーマップに問題があるのでしょうか. ご教授お願い致します. % 画像ファイルの読込 pictureRgb = imread('./data/gazou0.bmp'); pictureYcbcr = imread('./data/gazou0.bmp'); % YCbCr空間(フルレンジ)への変換 pictureYcbcr(:,:,1) = uint8(0.257 * double(pictureRgb(:,:,1)) + 0.504 * double(pictureRgb(:,:,2))... + 0.098 * double(pictureRgb(:,:,3))+16.0); pictureYcbcr(:,:,2) = uint8(-0.148 * double(pictureRgb(:,:,1)) - 0.291 * double(pictureRgb(:,:,2))... + 0.439 * double(pictureRgb(:,:,3))+128.0); pictureYcbcr(:,:,3) = uint8(0.439 * double(pictureRgb(:,:,1)) - 0.368 * double(pictureRgb(:,:,2))... + 0.071 * double(pictureRgb(:,:,3))+128.0); %R成分の表示 subplot(3,3,1); image(pictureRgb(:,:,1)); axis image; axis off; title('R 成分'); %G成分の表示 subplot(3,3,2); image(pictureRgb(:,:,2)); axis image; axis off; title('G 成分'); %B成分の表示 subplot(3,3,3); image(pictureRgb(:,:,3)); axis image; axis off; title('B 成分'); %--------------------------- %Y成分の表示 subplot(3,3,4); image(pictureYcbcr(:,:,1)); axis image; axis off; title('Y 成分'); %Cb成分の表示 subplot(3,3,5); image(pictureYcbcr(:,:,2)); axis image; axis off; title('Cb成分'); %Cr成分の表示 subplot(3,3,6); image(pictureYcbcr(:,:,3)); axis image; axis off; title('Cr成分'); %--------------------------- %原画像の表示 subplot(3,3,7); image(pictureRgb); axis image; axis off; title('元画像'); %YUV画像の表示 subplot(3,3,8); image(pictureYcbcr); axis image; axis off; title('YUV画像');

  • RGBからYUVへの変換(Matlab)についての質問です.

    先ほども質問させていただきましたが, 画像に誤りがあった為再度投稿させていただきます. 貴重なスペースを無駄に使用してしまい大変申し訳ありません. >> 現在Matlabを勉強中の者です. 160*120ピクセルの画像の色空間を RGBからYUV(YCbCr)へ変換するプログラムを考えているのですが, 以下のソースコードで大まかな点はあっているでしょうか? 実際にYUVへ変換後,画像を表示したところ, 元画像とは色調が変わってしまい頭を抱えています. 画像を表示する際のカラーマップに問題があるのでしょうか. ご教授お願い致します. % 画像ファイルの読込 pictureRgb = imread('./data/gazou0.bmp'); pictureYcbcr = imread('./data/gazou0.bmp'); % YCbCr空間(フルレンジ)への変換 pictureYcbcr(:,:,1) = uint8(0.257 * double(pictureRgb(:,:,1)) + 0.504 * double(pictureRgb(:,:,2))... + 0.098 * double(pictureRgb(:,:,3))+16.0); pictureYcbcr(:,:,2) = uint8(-0.148 * double(pictureRgb(:,:,1)) - 0.291 * double(pictureRgb(:,:,2))... + 0.439 * double(pictureRgb(:,:,3))+128.0); pictureYcbcr(:,:,3) = uint8(0.439 * double(pictureRgb(:,:,1)) - 0.368 * double(pictureRgb(:,:,2))... + 0.071 * double(pictureRgb(:,:,3))+128.0); %R成分の表示 subplot(3,3,1); image(pictureRgb(:,:,1)); axis image; axis off; title('R 成分'); %G成分の表示 subplot(3,3,2); image(pictureRgb(:,:,2)); axis image; axis off; title('G 成分'); %B成分の表示 subplot(3,3,3); image(pictureRgb(:,:,3)); axis image; axis off; title('B 成分'); %--------------------------- %Y成分の表示 subplot(3,3,4); image(pictureYcbcr(:,:,1)); axis image; axis off; title('Y 成分'); %Cb成分の表示 subplot(3,3,5); image(pictureYcbcr(:,:,2)); axis image; axis off; title('Cb成分'); %Cr成分の表示 subplot(3,3,6); image(pictureYcbcr(:,:,3)); axis image; axis off; title('Cr成分'); %--------------------------- %原画像の表示 subplot(3,3,7); image(pictureRgb); axis image; axis off; title('元画像'); %YUV画像の表示 subplot(3,3,8); image(pictureYcbcr); axis image; axis off; title('YUV画像');

  • MATLAB初心者です。教えてください

    MATLABにて画像のようなグラフを作りたいのですが、plotyyなどを使って作ろうとしてどうしてもできずに困っています。 左の画像から右の画像に変形させたいのです。 -10x<-5,5<x<10のyが二次関数のような曲線でそれ以外は水平です。 なにかいい方法が無いでしょうか? よろしくお願いいたします。

  • matlabに関する質問です.

    タイトルの通りmatlabに関する質問です. matlabの組み込み関数ndgridにつきまして,[X1,X2,...,Xn] = ndgrid(x1,x2,...,xn)のように入力をx1,x2,...,xnと増加させると出力もX1,X2,...,Xnと増加するのですが,任意の入力数(セル配列で入力)に対して出力側も任意の出力数に対応させたいのですが [Xn_cell{:}] = ndgrid(xn_cell{:})としてもエラーが出てしまい上手く出来ません. 何か良い方法はありませんでしょうか. ご教授の程,宜しくお願いいたします.

  • MATLAB/simulinkでのD/A変換の仕方

    現在MATLABで制御の勉強をしている大学生です。 今、デジタル制御について勉強しているのですが、MATLAB/simulinkを使いながら進めています。 MATLAB/simulinkでのD/A変換のやり方がわからなくて質問いたしました。 通常のアナログ制御の場合、 入力 → コントローラー → プラント → 出力 で多分、設計されると思うのですが、 デジタル制御の場合、 入力 → A/D変換器 → コントローラー → D/A変換器 → プラント → 出力 という流れになると聞きました。 A/D変換器はゼロ次ホールドを行うブロックがsimulinkにあったのでそれを使えばいいと思うのですが、D/A変換器を行ってくれるブロックが見当たりません。 探し方が悪いのでしょうか。。。 もしご存知であればD/A変換に相当するブロックを教えてください。 無ければ、s-functionか何かでのD/A変換のやり方を教えて頂けると助かります。 よろしくお願いします。

  • MATLABの射影変換についての質問です。

    MATLABの射影変換についての質問です。 1枚の画像に3×3の行列をかけて画像変換するつもりです。しかし、その画像自体は3×3ではないので、直接かけることができません。 そこで、3×3以外の画像行列に、3×3行列をかけて、変換された画像を表示する方法をお聞きしたいです。 どうぞ宜しくお願いします。

専門家に質問してみよう