2016-08-14 1 views
1

私は、キックとキックル用のフラクタルフレームレンダラを実装していて、愚かな色の問題でハングアップしています。アルゴリズムを実行した後、私はRGBAマトリックス(HxWxC、具体的には1080x1440x4)を取得しますが、scipyで行うよりもpyplotでレンダリングすると、結果が異なります。ここでは、出力コードは次のとおりです。scipyとpyplotのRGBデータのレンダリングが異なります

condensed = prepare_image(condensed, **condensed_args) 
condensed[np.isnan(condensed)] = 0 
name += '.png' if not name.endswith('.png') else '' 
sc.misc.imsave("sc_" + name, condensed, format='png') 
plt.imsave("pl_" + name, condensed) 

そしてここでは、2つの出力画像です:

scipyのダウンロード: Scipy's output image

Pyplot:背景色(0があるアルファを無視 Pyplot's output image

だから、私はそれを手で扱うことができます)、細部は全く違った色になります。サイフィは滑らかなシアン色を生みますが、パイロットは静的なra ndom色。 scipyの画像をpyplot.imreadで読み込んで表示すると、いいシアンが得られるので、pyplotが元のRGBAマトリックスをどのように解釈しているのかが分かるはずです。私は私が見ることができる他の場所では、カラーマップやインデックスを設定していません。両方のimsave関数のドキュメンテーションは、それらが同じように振る舞っていると思われます(そして、pyplotのimshowは予想通りにそのimsaveと同じ振る舞いをします)。

私が推測しなければならないのは、pyplotが自分のデータをHSLやその他の色空間として解釈しているように見えます。 Scipyは、私が期待しているものに近づき、アルゴリズムがどのように生成するはずです。

誰でも私がここで間違っているのを見てください。ヘルプは非常に高く評価されます。

答えて

0

scipy.misc.imsave()(実際の作業を行うために枕を使用する)浮動小数点配列を保存すると、配列の値が区間[0、1]に効果的にスケールされます。一方、plt.imsave()は、[0、1]の範囲内の値を変更することなく、[0,1]の値にクリップの値になります。

あなたは間隔にcondensedに値を変換する場合は、[0、1]

condensed = (condensed - condensed.min())/condensed.ptp() 

のようなものでplt.imsave()を使用して画像を保存する前に、それはscipy.misc.imsave()と同じ画像を生成する必要があります。

関連する問題