Russian Qt Forum
Ноябрь 23, 2024, 07:57
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
Мелом расчерчен...
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Мелом расчерчен... (Прочитано 7459 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Мелом расчерчен...
«
:
Июнь 26, 2012, 15:51 »
Добрый день
Опять лезу с "мозголомной задачей" (нет чтобы прикручивать базу, настраивать моники)
Чтобы задействовать все ядра расчет выполняется расчлененно. Представим себе имедж как шахматную доску, размер клетки напр 8х8 пыкселей
- проход 1: считаются все "белые" клетки в четных строках
- проход 2: считаются все "белые" клетки в нечетных строках
- проход 3: считаются все "черные" клетки в четных строках
- проход 4: считаются все "черные" клетки в нечетных строках
На каждом проходе запускается N ниток, следующий проход начинается после окончания предыдущего (все нитки завершились). Однако клетки перекрываются на 1 пиксель, т.е считаются матрицы 9x9. напр на последнем проходе все краевые пиксели уже были посчитаны. Расчет начинается с установки ID для каждого пикселя - идентификатор подмножества внутри матрицы. Каждый пиксель должен находиться в одном - и только в одном - таком подмножестве.
Нужно: если краевые точки уже были посчитаны (на предыдущих проходах), то они должны быть разделены на подмножества с учетом уже посчитанных ID. Например, если 2 точки при расчете одной матрицы оказались в одном подмножестве, то и при расчете смежной матрицы они также должны обязательно быть в одном. Если оказались в разных - то и в смежной клетке тоже в разных. Где и как хранить эти ID - обсуждается.
Мысли, соображения?
Спасибо
Записан
alexis031182
Гость
Re: Мелом расчерчен...
«
Ответ #1 :
Июнь 26, 2012, 16:23 »
Цитата: Igors от Июнь 26, 2012, 15:51
...
Расчет начинается с установки ID для каждого пикселя - идентификатор подмножества внутри матрицы.
...
В контексте задачи:
- Множество - матрица подмножеств 8х8;
- Подмножество - это матрица пикселей 9х9;
- ID для пикселя - это идентификатор Подмножества.
Верно я понял?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Мелом расчерчен...
«
Ответ #2 :
Июнь 26, 2012, 17:59 »
Цитата: alexis031182 от Июнь 26, 2012, 16:23
В контексте задачи:
- Множество - матрица подмножеств 8х8;
- Подмножество - это матрица пикселей 9х9;
- ID для пикселя - это идентификатор Подмножества.
Верно я понял?
Да. Рассчитываются матрицы 9x9 с перекрытием в 1 пиксель. Пример
Один проход считает матрицу (0, 0)(8. 8 )
Другой проход считает матрицу (0, 8 )(8. 16)
Таким образом напр пиксель (0, 8 ) входит в обе матрицы. Подмножества - это непересекающиеся группы точек внутри матрицы. Возможна более краткая формулировка:
- в каждом квадратике (матрице) выполняется кластерный анализ. Нужно "сшить" результаты (кластеры) между матрицами
«
Последнее редактирование: Июнь 26, 2012, 18:02 от Igors
»
Записан
alexis031182
Гость
Re: Мелом расчерчен...
«
Ответ #3 :
Июнь 26, 2012, 19:47 »
Правильно ли я понял принцип формирования подмножеств? На вложенном изображении цифрами указал кол-во непересекающихся подмножеств. Последняя колонка выбивается из общей схемы, но к ней трафарет можно по разному прикладывать
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Мелом расчерчен...
«
Ответ #4 :
Июнь 26, 2012, 20:09 »
Упрощенный пример: есть матрица 9х9, в каждом пикселе записан вектор нормали к поверхности. Тогда подмножества создаются примерно так
- взяли нормаль первого пикселя, создали множество (контейнер) и записали туда индекс этого пикселя
- из всех оставшихся выбираем (и записываем в контейнер) индексы таких что угол с первой нормалью не превышает напр 10 градусов.
- повторяем процесс до тех пор пока не останется "свободных" пикселей
Если нормали сильно отличаются (напр грани куба) то в любой матрице точки на одной грани куба окажутся в 1 подмножестве (кластере). Однако для гладких поверхностей это может быть не так. Поэтому если есть точки просчитанные на предыдущих проходах, надо строить сначала кластеры для них. Но как это сделать?
Записан
alexis031182
Гость
Re: Мелом расчерчен...
«
Ответ #5 :
Июнь 26, 2012, 20:21 »
М-да, теперь понял. После такого мне кажется, что в своём проекте я занимаюсь фигнёй
Интересная задача.
Записан
alexis031182
Гость
Re: Мелом расчерчен...
«
Ответ #6 :
Июнь 26, 2012, 22:25 »
Одно подмножество может соответствовать нескольким матрицам, правильно?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Мелом расчерчен...
«
Ответ #7 :
Июнь 27, 2012, 10:39 »
Цитата: alexis031182 от Июнь 26, 2012, 22:25
Одно подмножество может соответствовать нескольким матрицам, правильно?
Каждая нитка занимается "своей" матрицей, известно лишь что некоторые краевые пиксели уже были обсчитаны на предыдущих проходах и сохраненные в них данные можно/нужно использовать. После того как матрица обсчитана, нитка получит новую матрицу (никак не связанную с предыдущей).
Поэтому единственное что можно сделать - сохранить какие-то данные в пикселях. Конечно напрашивается ID (номер подмножества) но он уникален только в пределах данной матрицы
Записан
alexis031182
Гость
Re: Мелом расчерчен...
«
Ответ #8 :
Июнь 27, 2012, 11:03 »
Имеется ли возможность сохранять подмножества в некоем векторе матриц, индексы которого соответствовали бы порядковому номеру каждой из имеющихся матриц?
Поскольку при последующих проходах, при рассмотрении каждой конкретной матрицы нам фактически известны порядковые номера граничащих с текущей матриц, то поиск подмножества, содержащего информацию о граничащих пикселях текущей матрицы, будет тривиален.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Мелом расчерчен...
«
Ответ #9 :
Июнь 27, 2012, 11:09 »
Цитата: alexis031182 от Июнь 27, 2012, 11:03
Имеется ли возможность сохранять подмножества в некоем векторе матриц, индексы которого соответствовали бы порядковому номеру каждой из имеющихся матриц?
Да, хотя сохранение в пикселях выглядит проще и не требует никаких блокировок
Цитата: alexis031182 от Июнь 27, 2012, 11:03
Поскольку при последующих проходах, при рассмотрении каждой конкретной матрицы нам фактически известны порядковые номера граничащих с текущей матриц, то поиск подмножества, содержащего информацию о граничащих пикселях текущей матрицы, будет тривиален.
Красивое словечко "тривиально"
Да, известно что граничащие пиксели были обсчитаны - и что?
Записан
alexis031182
Гость
Re: Мелом расчерчен...
«
Ответ #10 :
Июнь 27, 2012, 11:56 »
Цитата: Igors от Июнь 27, 2012, 11:09
Да, хотя сохранение в пикселях выглядит проще и не требует никаких блокировок
Можно и в пикселах.
Цитата: Igors от Июнь 27, 2012, 11:09
Красивое словечко "тривиально"
Если бы Вы восприняли его со значением "просто", и без принятия во внимание вероятного желания с моей стороны обозначить некую собственную значимость, то безусловно не стали бы концентрировать своё внимание на столь незначительной детали. Проще говоря, проще быть лучше
Цитата: Igors от Июнь 27, 2012, 11:09
Да, известно что граничащие пиксели были обсчитаны - и что?
Стоп. Я никак не пойму... если
Цитата: Igors
Поэтому если есть точки просчитанные на предыдущих проходах, надо строить сначала кластеры для них.
Кластер - это подмножество. У каждой обсчитанной точки есть идентификатор подмножества. Известно, какие из точек уже подсчитаны. Сравнение по id - есть чёткое определение, принадлежат ли точки разным или одному подмножеству. Тогда
Цитата: Igors
если краевые точки уже были посчитаны (на предыдущих проходах), то они должны быть разделены на подмножества с учетом уже посчитанных ID. Например, если 2 точки при расчете одной матрицы оказались в одном подмножестве, то и при расчете смежной матрицы они также должны обязательно быть в одном. Если оказались в разных - то и в смежной клетке тоже в разных.
По идее, вся необходимая информация имеется. Что же явилось проблемой? Или просто в теме подразумевался поиск другого, более эффективного решения?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Мелом расчерчен...
«
Ответ #11 :
Июнь 27, 2012, 12:06 »
Цитата: alexis031182 от Июнь 27, 2012, 11:56
По идее, вся необходимая информация имеется. Что же явилось проблемой? Или просто в теме подразумевался поиск другого, более эффективного решения?
Нет, речь идет о "просто решении". Да, интуитивно вроде понятно что решаемо (точно доказать не могу). Проблема в том что записанные ID локальны и как их задействовать (в контексте др матрицы) неясно. Также неясно как их хранить.
Записан
alexis031182
Гость
Re: Мелом расчерчен...
«
Ответ #12 :
Июнь 27, 2012, 12:19 »
Цитата: Igors от Июнь 27, 2012, 12:06
Нет, речь идет о "просто решении". Да, интуитивно вроде понятно что решаемо (точно доказать не могу). Проблема в том что записанные ID локальны и как их задействовать (в контексте др матрицы) неясно. Также неясно как их хранить.
Другими словами, id подмножества стирается из пиксела как только будет завершён текущий проход?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Мелом расчерчен...
«
Ответ #13 :
Июль 13, 2012, 12:58 »
В общем сделал я структуру данных для отслеживания ID локальных подмножеств. У каждой точки есть mLocalID[4]. Если точка внутри квадрата используется только mLocalID[0] - только 1 квадрат может записать. Для точек на границах используются 2 элемента и для угловых точек - все 4. Расклад показан в аттаче
Однако выяснилось "локальные подмножества" нельзя перевести в "глобальные подмножества". На последнем проходе подмножества извлекаются с учетом 4 посчитанных соседей. Получается что один сосед диктует "эти 2 точки в разных подмножествах" а другой "эти 2 в одном". И как разрешить этои конфликт - пока не знаю
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...