1 / 1 / 0
Регистрация: 10.09.2023
Сообщений: 49
1

Перевод координат изображения в мировые

03.02.2025, 14:06. Показов 1915. Ответов 3

Author24 — интернет-сервис помощи студентам
Добрый день. Помогите пожалуйста понять какой алгоритм действий нужен для того чтобы перевести координаты объекта на изображении в его реальные координаты. Камера направлена вертикально вниз.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2025, 14:06
Ответы с готовыми решениями:

Перевод из оконных координат в мировые
Знаю, что конечная матрица, выходящая на экран, формируется следующим образом MVPmatrix = projection * view * model; Пытаюсь...

DirectX11 перевод локальных координат в мировые
Добрый день. Подскажите пожалуйста и желательно приведите пример: как с помощью directxmath.h перевести локальные координаты в мировые,...

Преобразование экранных координат в мировые
Собственно как и чем можно преобразовать экранные координат курсора мыши в мировые ???

3
 Аватар для andrey_f
596 / 379 / 184
Регистрация: 21.02.2011
Сообщений: 5,130
12.02.2025, 12:36 2
Для начала вам нужно откалибровать вашу камеру. Это позволит вам получить параметры камеры, такие как фокусное расстояние и центры оптической оси. Калибровка даст вам матрицу камеры (K) и коэффициенты искажения. Необходимо знать положение камеры относительно объекта (высоту, угол наклона и т.д.), а также размеры объекта или расстояние до него. Если камера направлена вертикально вниз, то вам важно знать высоту камеры над объектом.
0
1 / 1 / 0
Регистрация: 10.09.2023
Сообщений: 49
12.02.2025, 14:52  [ТС] 3
Спасибо за ответ. Немного поясню свою задачу. Я делаю макет робота, который играет в шашки. Камера закреплена неподвижно и смотрит вертикально вниз. Известно высота камеры над объектом (шашкой). Я нахожу координаты шашки на изображении и их мне надо как-то переводить в мировые.

Что я понял на данный момент:
Нужно откалибровать камеру при помощи датасета с изображениями шахматной доски в разных положених и ориентациях с использованием функции calibrateCamera. Эта функция возвращает mtx, dist, rvecs, tvecs. Первые два значения - это матрица внутренних параметров камеры и коэфициенты дисторсии. Их можно сохранить в файл и затем переиспользовать.
Не до конца понимаю rvecs и tvecs. Если у меня камера неподвижна, то в rvecs и tvecs записываются векторы трансляции и поворота системы координат шахматной доски относительно системы координат камеры для каждого кадра из датасета для калибровки? Так ведь?

Ну и как теперь переходить от координат на изображении в реальные координаты я тож не пойму. Я думал в процессе калибровки разместить калибровочный паттерн в одном из кадров так, чтобы его система координат совпала с системой шашечной доски. Взять получившиеся rvecs и tvecs для этого кадра. Это получится матрица внешних параметров. Ну и потом у меня есть матрицы внутренних и внешних параметров, коефициенты дисторсии, высоту я знаю, и по идее тогда могу получать координаты шашек в мм в системе доски. Но как это сделать?
0
 Аватар для andrey_f
596 / 379 / 184
Регистрация: 21.02.2011
Сообщений: 5,130
13.02.2025, 10:57 4
вот пример реализации, вам так нужно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <opencv2/opencv.hpp>
#include <iostream>
 
void pixelToWorld(const cv::Point2f& pixel, const cv::Mat& mtx, const cv::Mat& rvec, const cv::Mat& tvec, float height, cv::Point3f& worldCoord) {
    // 1. Нормализуем пиксельные координаты
    cv::Mat normalizedCoords = mtx.inv() * cv::Mat(cv::Vec3f(pixel.x, pixel.y, 1));
 
    // 2. Умножаем на высоту
    cv::Mat worldCoords = height * normalizedCoords;
 
    // 3. Применяем матрицу внешних параметров
    cv::Mat R;
    cv::Rodrigues(rvec, R); // Преобразуем в матрицу вращения
    cv::Mat t = tvec.clone();
 
    // 4. Переводим в мировые координаты
    cv::Mat worldCoordsTransformed = R * worldCoords + t;
 
    // 5. Сохраняем результат
    worldCoord = cv::Point3f(worldCoordsTransformed.at<float>(0), worldCoordsTransformed.at<float>(1), worldCoordsTransformed.at<float>(2));
}
 
int main() {
    // Загрузка матрицы внутренних параметров и коэффициентов дисторсии
    cv::Mat mtx; // Загрузите вашу матрицу
    cv::Mat dist; // Загрузите ваши коэффициенты дисторсии
    cv::Mat rvec; // Вектор вращения
    cv::Mat tvec; // Вектор трансляции
 
    cv::Point2f pixel(100, 200); // Пример пиксельных координат шашки
    float height = 100; // Высота камеры над шашкой в мм
    cv::Point3f worldCoord;
 
    pixelToWorld(pixel, mtx, rvec, tvec, height, worldCoord);
 
    std::cout << "World Coordinates: " << worldCoord << std::endl;
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.02.2025, 10:57
Помогаю со студенческими работами здесь

Преобразование координат мыши в мировые координаты
Привет всем! Начал писать 3d игру и возникла проблема: преобразование координат. Дело в том, что я преобразовать координаты(точнее найти...

Перевод в мировые координаты
Проблема такая: у меня есть координаты мыши: mousePos , есть матрица view - view, есть матрица перспективной проекции: pMatrix Я перевожу...

Поворот изображения. Неверное вычисление координат нового изображения
Всем привет. Помогите решить проблему. У меня стоит задача: загрузить изображение и повернуть (на любой угол). Я написал вот такой код: ...

Перевод координат в другую систем координат
как перевести плоские координаты хyz в другую систему координат x1y1z1 по трем и более точкам?

Установка координат изображения
Хочу изображение поставить в определённіх кординатах. К приеру пишу вот такой код: &lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
Apache Airflow для оркестрации и автоматизации рабочих процессов
Mr. Docker 16.03.2025
Управление сложными рабочими процессами — одна из главных головных болей инженеров данных и DevOps-специалистов. Представьте себе: каждый день нужно запускать десятки скриптов в определенной. . .
Оптимизация приложений Java для ARM
Javaican 16.03.2025
ARM-архитектура переживает настоящий бум популярности в технологическом мире. Когда-то воспринимаемая исключительно как решение для мобильных устройств и встраиваемых систем, сегодня она штурмует. . .
Управление состоянием в Vue 3 с Pinia и Composition API
Reangularity 16.03.2025
Когда я начал работать с Vue несколько лет назад, мне казалось достаточным использовать простую передачу данных через props и события между компонентами. Однако уже на среднем по сложности проекте. . .
Введение в DevSecOps: основные принципы и инструменты
Mr. Docker 16.03.2025
DevSecOps - это подход к разработке программного обеспечения, который объединяет в себе принципы разработки (Dev), безопасности (Sec) и эксплуатации (Ops). Суть подхода заключается в том, чтобы. . .
GitHub Actions vs Jenkins: Сравнение инструментов CI/CD
Mr. Docker 16.03.2025
В этой битве за эффективность и скорость выпуска программных продуктов ключевую роль играют специализированные инструменты. Два гиганта в этой области — GitHub Actions и Jenkins — предлагают разные. . .
Реактивное программировани­е с Kafka Stream и Spring WebFlux
Javaican 16.03.2025
Реактивное программирование – это программная парадигма, ориентированная на потоки данных и распространение изменений. Она позволяет выражать статические или динамические потоки данных и. . .
Простая нейросеть на КуМир: Учебное пособие по созданию и обучению нейронных сетей
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
Исполнитель Кузнечик в КуМир: Решение задач
EggHead 16.03.2025
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru