172 похожих чатов

Всем привет. Есть такой вопрос: кто-нибудь вообще может примерно предположить

как можно из картинки панорамы сделать обычную картинку? То есть программой убрать искривление. Я думал над этим и по идее может сработать, если по картинке двигать каждый пиксель по определённой формуле. Может кто знает как двигать эти пиксели в картинке? В гугле уже 3 день ничего подобного именно на языке свтфт не могу найти. Там есть изменение цвета в пикселе, но не его движение относительно своей системы координат

11 ответов

13 просмотров

Если можно менять цвет пикселя, то можно сделать так чтобы цвет менялся на цвет следующего, и по сути оно сдвигаться будет

Andrei-Nik Автор вопроса
Tima
Если можно менять цвет пикселя, то можно сделать т...

Кстати неплохая идея, можно попробовать, так как размер итоговой картинки не должен меняться

Тебе прямая дорога в мир Metal, там можно творить чудеса. Гугли, точно не подскажу, не работал с ним так глубоко

Andrei-Nik Автор вопроса
bobrov Dobretsov B
Тебе прямая дорога в мир Metal, там можно творить ...

Знаю про метал, но не знаю можно ли с помощью этой технологией сделать что-то подобное

Andrei-Nik Автор вопроса

Вопрос интересный. Начать нужно с определения проекции используемой при построении панорамы. В большинстве случаев это равнопромежуточная проекция(aka сферическая или equirectangular). Соответственно тебе нужно замапить это дело в обычную гномоническую проекцию(gnomonic или rectilinear) Теперь уже можно составить нормальный запрос в гугле по типу: convert(map) equirectangular projection to rectilinear projection В целом этот процесс состоит из нескольких этапов(большая часть из которых есть в книге , глава 9.1.6) - - определить используя координаты пикселей панорамы соответствующие сферические координаты; - из сферических координатов вида (sinθ, h, cosθ) определить θ и h; - получить 2D координаты (x, y) на сфере использую полученные θ и h - - сделать билинейную интерполяцию между начальными пикселями и новыми. Реализацию этих шагов можно найти на гитахабе по тем же ключевым словам: equirectangular to rectilinear Но свифта там конечно же не будет - это сильно нишевая задача. --- Касаемо реализации на свифте. Тут у тебя два выбора, это Accelerate: vImage + vDSP , либо Metal. Но Metal можно сразу отбросить, ибо это голое апи, которое нужно во-первых знать(а на это уйдёт много времени), во-вторых придётся написать поверх часть нужных вещей, которые уже есть в Accelerate. В Accelerate перегонишь CGImage в vImage.PixelBuffer, важно это сделать без копирования. Примеры в доке есть. vImage.PixelBuffer предоставляет готовые операции по работе с битмапом, их много, но этого тебе будет недостаточно для всех шагов указанных выше. Придётся поработать ещё с функциями vDSP из того же Accelerate. Они позволят выполнить ещё ряд математических операций над векторами. Не забывай при работе с vDSP, что память в vImage.PixelBuffer выровнена по кэш-линиям процессора и нужно учитывать соотвествующий alignment в строке(в доке тоже это есть). --- Функции Accelerate работают только с указателями и сами распараллелят работу по ядрам. Это нАмного быстрее чем делать такую работу в обычном for loop(даже если учесть что компилятор сможет векторизовать часть циклов) конечно не варинат, сюда можешь даже не смотреть.

Привет! Как жизнь? Куда пропадал?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта