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

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

ただいまの
回答率

90.50%

  • Python 3.x

    6419questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

2Dマップを用いた3Dマップの作成手法について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 127

aoisora

score 1

 前提・実現したいこと

このような勾配を表した2次元の図を用いて、3次元のマップを作成したいと考えています。
(グラフの青色の部分から赤色の部分に向けて山なり)
初歩的な質問になってしまい申し訳ありませんが、よろしければご教授ください。

イメージ説明

 該当のソースコード

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pylab as pl
from PIL import Image
import numpy as np
import pylab

img = Image.open('rei.jpg').convert('L')
z   = np.asarray(im_gray)
print(np.shape(z))
mydata = z[::1,::1]
fig = pl.figure(facecolor='w')
ax1 = fig.add_subplot(1,2,1)
im = ax1.imshow(mydata,interpolation='nearest',cmap=pl.cm.jet)
ax1.set_title('2D')

ax2 = fig.add_subplot(1,2,2,projection='3d')
x,y = np.mgrid[:mydata.shape[0],:mydata.shape[1]]
ax2.plot_surface(x,y,mydata,cmap=pl.cm.hot,rstride=1,cstride=1,linewidth=0.,antialiased=False)
ax2.set_title('3D')
ax2.set_zlim3d(0,100)
pl.show()

 試したこと

画像の表示をjetを用いることで勾配が表現されるのではないかと考えましたが、画像を読みこむ段階でconvertを用いて
グレースケールにしているため、図中の赤でも青でもない(黄緑色)部分が勾配としてうまく表現されませんでした。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

グレースケールでは画像の情報(z軸方向)を正確に取り込めません(用いているcolormapにもよると思いますが).特に理由が無いのであればRGBの3次元データで解析するべきだと思います.
参考 Choosing Colormaps

"勾配を表した"が,"標高を表した"として以下のような提案をしています.
もし,"勾配"であったとしても,元データを再構成すれば目的のプロットは作れると思うので,良ければ参考にしてください.


  • 元データがある場合(質問はこれに該当しないと思うが).
    1, そのまま3次元プロット.

  • 2次元プロットを作成した状況(例えばmatplotlibでcolormapはjetなど)が分かる場合(かつ元データは不明).
    1, 画像をグレースケールにせず取り込む.
    2, jet等のcolormapのRGBの値に画像のRGBを当てはめて相対値(0~1)を得る.
    3, 各ピクセルで作業を繰り返し,2次元プロットを自分で作成できる状況に持っていく.
    4, 3次元プロットを作成する.
    この場合,2に相当する関数RGB2Vのようなものを作れば良いと思います.(R,G,B) -> (0~1)の変換が簡単にできるapiがあるかはわかりませんが,(0~1) -> (R,G,B)というは例えばcm.hot(float)から得られるので,その逆関数を作れるかどうかが鍵でしょうか.原理的にはできる筈です.

  • プロット作成状況が不明の場合(ネットで拾った図など)
    1, プロットを見てどのcolormapが使われているかを推測する.
    2, 上記の場合と同様に処理.
    この場合,colormapの推定で結果が大きく変わります.極端な例では赤と青の値を逆にすれば,山のような形からくぼんだ形になります.どれを選ぶかで大きなバイアスがかかるので,どんなところから拾ったプロットでもうまくいくプログラムを書くのは難しいと思います(機械学習等である程度実現できそうですが).

ここに挙げたのは画像から元データを(少なくとも相対的な関係を)推定する手法なので,非常に原始的なやり方です.自分で実装して無いので考えだけの回答になりますが,参考になれば幸いです.ダラダラとした文章で申し訳ありません.

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    Matplotlib(Python)のフォントに関して

    前提・実現したいこと Pythonのmatplotlibについて、フォントに関する質問があります。x軸とy軸のラベルフォントを「sans-serif」に設定した上で一部の文字を斜

  • 解決済

    PIL Image 日本語が文字化けする

    from PIL import ImageFont, ImageDraw, Image img = Image.new("RGB", (500,750),(255, 255, 2

  • 解決済

    pandasで散布図を作成したい

    したいこと 下記のcsvファイルがあります X軸に乗客、y軸にうどんをセットして散布図を作成したいです。 駅,うどん,乗客 青井駅,9,1000 新橋駅,100,1000

  • 解決済

    三次元グラフ同時に表示できるようにしたい

    前提・実現したいこと 同時に2枚(またはそれ以上)表示されるようにしたい 発生している問題・エラーメッセージ 2枚表示はされるが完全に重なった位置に表示されてしまうため、

  • 解決済

    pythonの画像の読み込みについて

    pythonの勉強をしています。ある画像を読み込み、それを配列化してテキストデータとしてファイルに保存したいです。 下記のようなコードを描いたのですが、これが正しく出力がされ

  • 解決済

    pythonの図示 matpotlib

    pythonで四角形が格子状に区切られそれぞれの点に数字が振られています。それをコンターマップのように(ただし、等高線はいらない)図示したいのですがどのように書けばよいでしょうか

  • 解決済

    Pythonのmatplotlibを使って三次元散布図をシンプルに描写したい

    前提・実現したいこと Python初心者です。 1人3属性からなる1000件ほどのデータを、3次元の散布図として描写したいです。 属性一つ一つがそのままX,Y,Zに対応するイメージ

  • 受付中

    pythonで画像のbit深度を変換する方法とは

    pythonで画像のbit深度を変換する方法を教えていただきたいです。 例えば、CV_8SC3からCV_32FC2に変換するにはどうしたらよいのでしょうか? featuresと

同じタグがついた質問を見る

  • Python 3.x

    6419questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。