Я использую XNA для создания проекта, где я могу нарисовать "граффити" на моей стене с помощью ЖК-проектора и монохромной камеры, которая фильтруется, чтобы видеть только ручные лазерные точки. Я хочу использовать любое количество лазерных указателей - на самом деле не важно их дифференцировать в данный момент.
Стена 10 'x 10', а камера - только 640x480, поэтому я пытаюсь использовать субпиксельное измерение с использованием кривой сплайна, как описано здесь: tpub.com
Камера работает со скоростью 120 кадров в секунду (8 бит), поэтому мой вопрос для вас - это самый быстрый способ найти центр подпиксельной лазерной точки. В настоящее время я использую 2D-поиск грубой силы, чтобы найти самый яркий пиксель на изображении (0 - 254), прежде чем выполнять сплайн-интерполяцию. Этот метод не очень быстрый, и каждый кадр занимает больше времени, чем компьютер.
Изменить: Чтобы уточнить, в конце мои данные камеры представлены двумерным массивом байтов, указывающим яркость пикселей.
Что бы я хотел сделать, это использовать шейдер XNA, чтобы хрустнуть изображение для меня. Это практично? Из того, что я понимаю, на самом деле не существует способа сохранить постоянные переменные в пиксельном шейдере, такие как текущие итоги, средние значения и т.д.
Но для аргументов, скажем, я нашел самые яркие пиксели с использованием грубой силы, а затем сохранил их и их соседние пиксели для кривой сплайна в X число вершин, используя texcords. Имеет ли смысл использовать HLSL для вычисления сплайновой кривой с использованием texcords?
Я также открыт для предложений за пределами моего окна XNA, будь то DX10/DX11, возможно, какой-то FPGA и т.д. У меня просто нет большого опыта в том, как хрустать данные таким образом. Я полагаю, что если они могут сделать что-то подобное на Wii-Mote, используя 2 батареи AA, я, вероятно, ошибаюсь.
Любые идеи?