写真測量アプリケーション用の一連のテスト画像を生成する必要があります。 これらは、非常に正確に既知の位置を持つ単純なオブジェクト(ディスク、長方形など)を含む必要があります。OpenGLでのサブピクセルレンダリング - 精度の問題
白い背景上の黒い矩形の8ビットグレースケール画像を考えると、各ピクセルの256の可能な輝度レベルがあるので、最小の観察可能な変位(補間後)は1/256ピクセルでなければならない。
は、私は後で私が
は残念ながら、最高の精度は、私が達成したより複雑な(3Dシーン、ステレオ画像対)をレンダリングする必要があります、そのような画像をレンダリングする(のpython + pygletで)OpenGLを使用することにしましたピクセル/ 10の周囲にある場合、最大強度の深度は使用されません。
完全に1/256pixelの精度を達成するのが理想的です。それをどうするかについてのヒントはありますか?
サンプルコードは、部分的なディスクの画像を生成する、各フレームでより
#-*- coding: utf-8 -*-
import pyglet
from pyglet.gl import *
from PIL import Image, ImageGrab
config = pyglet.gl.Config(width = 800, height = 600, sample_buffers=1, samples=16)
window = pyglet.window.Window(config=config, resizable=True)
window.set_size(800, 600)
printScreenNr = 0
@window.event
def on_draw():
global printScreenNr
window.clear()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity()
glEnable(GL_LINE_SMOOTH)
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glTranslated(200, 200,0)
circleQuad = gluNewQuadric()
glTranslated(200+(printScreenNr*0.01), 0, 0)
gluPartialDisk(circleQuad, 0, 50, 500, 500, 0, 180)
@window.event
def on_resize(width, height):
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho (0, width, height, 0, 0, 1);
glMatrixMode(GL_MODELVIEW)
return pyglet.event.EVENT_HANDLED
@window.event
def on_text(text):
global printScreenNr
if(text == "p"):
pyglet.image.get_buffer_manager().get_color_buffer().save('photo'+str(printScreenNr)+'.tiff')
printScreenNr += 1
pyglet.app.run()
を0.01ピクセルだけ移動(上記のコードはgluPartialDiskを使用して、私は四角形を使用しても問題をテストして、その結果精度がなかったです違いはありません)
32ビットの色深度を試しましたか?私がこれを言うのは、グラフィックドライバでは、32ビットのパスが最も使用されているため、現在最も管理されているコードパスであるということです。これが機能する場合は、その後、高品質の色深度を再スケールすることができます。 – Ani
それを試しましたが、結果を変更していませんでした... まだ、ありがとうございます – Pietro