• 締切済み
  • 困ってます

【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を出力してみたりしてみましたがダメでした。 駄文となり申し訳ありません。 皆様の知識をお借りできれば幸いです。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数626
  • ありがとう数6

みんなの回答

  • 回答No.1
  • Kules
  • ベストアンサー率47% (292/619)

csvfilenameにどんなものが入っているのか想像しかできないので 再現するのがめんどくさくやっていないのですが… saveasに渡しているのがh_surfということは h_surfにはsurfで描いたもののプロパティしか入っていないのでは? saveasに渡すのをgca(現在のaxes)あるいはgcf(現在のfigure) にしてみてはいかがですか? 検証していないのでこれでできるかはわかりませんが… 参考になれば幸いです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

返答遅くなってすいません!回答ありがとうございます。 図のプロパティがどうなっているか調べてみます。

関連するQ&A

  • MATLABで外部プログラムをバックグラウンド実行

    MATLABで外部プログラムを実行したいと考えています。 具体的に申し上げると、ファイル起動時にデータを吸い上げcsvとして出力するマExcelファイルを起動させ、csvが出力されたらMATLABで読み込み、処理を行うというものです。   そこで、!を使えば、外部プログラムが立ち上がるので、 例えば、 ! C:\work\test.xlsx とすると、test.xlsxを立ち上げることが出来ますが、test.xlsxを閉じないとMATLABのほうに戻ってきません。   そこで、末尾に & を付けて ! C:\work\test.xlsx & とすると、目的は達成できたのですが、 黒い窓(コマンドブロンプト)が出てきて、見た目が悪いので、 この黒い窓を出さずに、外部プログラムをバックグラウンドで実行する方法は無いでしょうか?

  • 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) で出力したのと同じ様な画像を載せたいのですが方法を教えてください。 お願いします。

  • C言語→MATLABへの変換で、困っています。

    学生研究でMATLABを使用しています。 光学測定系で画像を取り込み、それを解析する実験を行っています。 MATLABはプログラム内の値の変更や処理の追加できることから 大変助かっています。 そこで、もともとはC言語でやっていた3種類の処理を 一つのMファイルで行いたいと思い。 只今、C→MATLAB変換するプログラムの書き直しを行っています。 そのうち2種のプログラムは行列の計算がメインだったため何とか Mファイルに書き直すことができたのですが、 最後のひとつが難しい関数らしきものが多く、 MATLABに書き直すことができるプログラムなのかもわからない状態です。 そこで、 ・C→MATLAB変換可能なプログラムか? ・書き直すにあたってどこを部分を直せばよいのか? をアドバイスいただけないでしょうか? ↓MATLAB化したいC言語ファイル http://karispace.web.fc2.com/cmat2.c 一枚のbmp画像から4枚のdatデータを出力するプログラムです。 C言語とMATLABの三ヶ月前に勉強して、使用しており、基礎がわかる程度です。 よろしくお願いします。

  • MATLABで連続した画像の取り込み方

    1つのJPGファイルを取り込み、表示させるやり方は I = imread('sample000.jpg'); imshow(I) これででき、作業を書くと for t=1:1:10 if(t==1) A=imread('sample000.jpg'); imshow(A) hold on [xa, ya]=textread('sample01.txt','%d %d','headerlines',10); end plot(xa(t,1), ya(t,1), 'r+'); if(t==10) hold off end end ということになります。 10回ループさせるのは、sample01.txtの10行目以降の中身が10個ずつの座標だからです 以下はsample01.txtの中身を簡単に書いたものです ...         ※9行目 test coordinates  ※10行目 44 54        ※11行目 45 46 53 43 55 41 58 38 61 33 66 36 69 41 72 47 73 52        ※20行目 10         ※21行目 46 54        ※22行目 48 52 ... ... 77 51        ※31行目 10         ※32行目 47 52        ※33行目 ... ... という感じです。 で、本題ですが sample000.jpg sample001.jpg sample002.jpg ... ... など複数のjpgファイルをループを使って連続して取り込み、作業したいときは、どういうコマンドでどういうループを作ればいいでしょうか? 具体的には 1枚目のsample000.jpgファイルを読み込みhold on、sample01.txtの11行目から20行目の座標を赤い点でプロットし、最後にhold off 2枚目のsample001.jpgファイルを読み込みhold on、sample01.txtの22行目から31行目の座標を赤い点でプロットし、最後にhold off 3枚目の... というループです。 下手な説明でごめんなさい、誰かMATLABの画像処理に詳しい方がいたら応答よろしくおねがいします。

  • MATLABでのエッジ強度画像の出力と保存

    MATLABで画像処理を行ない,対象とする画像(添付のcell.jpg)の勾配強度画像を得たいと思っております.ただし,その保存がうまくいきません. プログラムは,下記のコードを利用しました. im = imread('C:/work/cell.jpg'); im = rgb2gray(im); %メディアンフィルタで平滑化 J = medfilt2(im); figure(1) imshow(J) %勾配強度画像を求める hy = fspecial('sobel'); hx = hy'; Iy = imfilter(double(J), hy, 'replicate'); Ix = imfilter(double(J), hx, 'replicate'); gradmag = sqrt(Ix.^2 + Iy.^2); %figure, imshow(gradmag,[]), title('Gradient magnitude (gradmag)') imshow(gradmag,[]) 上記のプログラムで正しくエッジ強度画像は出力されるのですが,問題はそれを保存するときです. 「imwrite(gradmag, 'C:/work/cell_grad.jpg','jpg')」 のように保存すると,添付ファイルのようになってしまいます. どのようにしたら解決できますでしょうか. どなたかお分かりになる方がいらっしゃいましたら,ご教示お願い致します.

  • MATLABのrbboxについての質問です。

    MATLABのrbboxについての質問です。 MATLABである画像の領域内の情報を取得できるようにしたいのですが、調べてみると、rbboxという関数を使って出来るらしいです。実際にMATLABのHPにあったソースコードを動かしてみると、画像にマウスでドラッグした領域の枠が描かれるのですが、その画像の領域をどうやって処理を行えるように出来るのかがわかりません。出来れば教えてほしいです。rbboxのソースコードを下に示します。宜しくお願いします。 figure; pcolor(peaks); k = waitforbuttonpress; point1 = get(gca,'CurrentPoint'); % ボタンダウンの検出 finalRect = rbbox; % figure単位の出力 point2 = get(gca,'CurrentPoint'); % ボタンアップの検出 point1 = point1(1,1:2); % x と y の抽出 point2 = point2(1,1:2); p1 = min(point1,point2); % 位置と大きさの計算 offset = abs(point1-point2); % x = [p1(1) p1(1)+offset(1) p1(1)+offset(1) p1(1) p1(1)]; y = [p1(2) p1(2) p1(2)+offset(2) p1(2)+offset(2) p1(2)]; hold on axis manual plot(x,y,'r','linewidth',5) % ボックスの回りに選択した領域の描画

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

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

  • 画像の切り替えボタンについて教えてください

    サムネイルをクリックするごとに、拡大画像がそれらの下に表示されるページを作っています。 拡大された画像をクリックすると、再びサムネイルだけの状態に戻ります。 そこで質問なのですが、拡大された状態の時に、次の画像に進むボタンと戻るボタンを表示させ、実際に切り替えることができ、 サムネイルだけの状態の時にはボタンが表示されないといったものを作る場合、どういった様にすればいいのでしょうか。 いろいろ試してはみたのですが、当方初心者ですのでなかなか動いてくれません。 以下は進む、戻るボタン無しのソースです。 ---------------------javascript------------------------ // resizeImg() function resizeImg(imgId,width,height) { var objStr,obj; if(document.images) { objStr = 'document.' + imgId; obj = eval(objStr); obj.width = width; obj.height = height; } } // imageSwap() function imageSwap(daImage, daSrc) { var objStr,obj; if(document.images) { if (typeof(daImage) == 'string') { objStr = 'document.' + daImage; obj = eval(objStr); obj.src = daSrc; } else if ((typeof(daImage) == 'object') && daImage && daImage.src) { daImage.src = daSrc; } } } ------------------------html--------------------------- <a href="#" onclick="resizeImg('test1',300,300); imageSwap('test1','image/test1.jpg')"> <img src="image/th-test1.jpg" alt="" width="50" height="50" /></a> <a href="#" onclick="resizeImg('test1',300,300); imageSwap('test1','image/test2.jpg')"> <img src="image/th-test2.jpg" alt="" width="50" height="50" /></a> <a href="#" onclick="resizeImg('test1',300,300); imageSwap('test1','image/test3.jpg')"> <img src="image/th-test3.jpg" alt="" width="50" height="50" /></a><br /> <a href="#" onclick="resizeImg('test1',1,1); imageSwap('test1','image/kuuhaku.gif');"> <img name="test1" src="image/kuuhaku.gif" alt="" width="1" height="1" /></a> ---------------------------------------------------- よろしくお願いします。

  • BMP画像の画像データ本体をテキストデータとして保存したい

    BMP画像を読み込んで、ヘッダ箇所などの本体と関係ない部分を読み飛ばして、画像本体をテキストファイルとして保存するプログラムを作ったのですが、実際の画像の大きさ(512x480)と出力結果(質問箇所最下に記載)の画像の大きさが異なってしまいます。あまり画像に詳しくないので、どこが間違っているのか分かりません。どこを修正すべきか教えてください。以下が作成したプログラムです。 public class bmpTotxt {  public static void main(String[] args){   try {    FileReader fr = new FileReader("./1.bmp");    BufferedReader br = new BufferedReader(fr);    FileWriter fw = new FileWriter("./pic.txt");    int i,count=0,len=0,width=512*4,height=0;    while((i = br.read()) != -1){     /* 画像本体箇所なら */     if(len >= 54){      fw.write(i+" ");      len++;      count++;            if(count == width){        fw.write("\n");        height++;        count = 0;      }     }     else{       len++;     }    }    System.out.println("ヘッダ長:"+54);    System.out.println("画像データ長:"+(len-54));    System.out.println("width:"+width/4);    System.out.println("height:"+height);    fr.close();    fw.close();   }   catch (Exception e) {    e.printStackTrace();   }  } } /* 出力結果   ヘッダ長:54   画像データ長:648480   width:512   height:316 */

    • ベストアンサー
    • Java
  • IE10のTIFF画像リンクのメッセージ非表示

    IEのバージョンを10に上げたらTIFF画像へのリンクでメッセージが表示されるようになりました。 HTMLのソースは、以下のように書いています。 <a href="test.tif" target="_blank">tiff</a> ローカルのWindowsには、.tifに対してフリーウェアの画像閲覧ソフト(IfranView)に関連付けしています。 以前のバージョンのIEでは、上記のリンククリックで直接メッセージを表示することなくIfranViewでTIFF画像が開いていました。 IE10で、メッセージを表示させずにリンククリックでtiff画像が開くようにすることはできますでしょうか? サーバー側の設定変更でも、ローカル側の設定変更でもかまいません。 Perlでtiff画像を表示するプログラムを作っています。 画像へのリンクが多く、大量の画像を確認しながら作業を進めるプログラムです。 クリックのたびにメッセージから「ファイルを開く」をクリックするのが面倒です。 ■環境 サーバー ・Perl5 ・Apache(自分に直接の権限はありませんが、業者に設定変更お願いすることできます) ローカル ・Windows7 ・IE10 ・IfranView(画像表示ソフト)←tiffが表示されるのでしたら別アプリでもかまいません。

    • ベストアンサー
    • Perl