Russian Qt Forum
Ноябрь 22, 2024, 13:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3 4 ... 6   Вниз
  Печать  
Автор Тема: Восстановление изображения  (Прочитано 29595 раз)
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #15 : Октябрь 22, 2020, 11:14 »

Да и не нужно на неё смотреть..

хочется понять из какого изображения получается восстановление
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Октябрь 22, 2020, 12:10 »

хочется понять из какого изображения получается восстановление
И мне, присоединяюсь

Задача такая:
Имеется матрица пикселей: каждый пиксель имеет свои координаты (x, y) и значение (R, G, B). Причём большинство пикселей "битые",
пусть для определённости, 95% всех пикселей нерабочие, и мы можем работать только с оставшимися 5% "живых" пикселей. Живые пиксели
равновероятно распределены по всей матрице и мы знаем их координаты (x, y).
Вопрос: как на основе "живых" пикселей наиболее "корректно" восстановить всё изображение?
Ну если знаем какие "живые" а какие "битые" - то все не так уж плохо. Разумеется вещь известная и поиски готового решения здесь к месту. Но и великом здесь неплохо - просто триангуляция (по Борису Николаевичу), а дальше дело сводится к тому самому "закрашиванию треугольника" (от которого научный работник воротил нос)

Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #17 : Октябрь 22, 2020, 13:35 »

Цитировать
хочется понять из какого изображения получается восстановление

Цитировать
И мне, присоединяюсь

Хорошо, представим такую модельную ситуацию, что представлена в exapmple2:
У нас есть оригинальное изображение (W*H) пикселей. Мы его загружаем
Код
C++ (Qt)
   boost::gil::rgb8_image_t img;
   boost::gil::read_image("photo.png", img, boost::gil::png_tag());
   boost::gil::rgb8_view_t view = boost::gil::view(img);
 
И далее говорим, что нам доступны только 5% пикселей
(равновероятно распределённых, но в то же время мы знаем их координаты и значения R G B для каждого такого пикселя)
от общего их числа W*H.
В example2 это моделируется с помощью случайных чисел:
Код
C++ (Qt)
std::random_device rd;
   std::mt19937 gen(rd());
 
   std::uniform_int_distribution<size_t> dist_x(0, view.width()-1);
   std::uniform_int_distribution<size_t> dist_y(0, view.height()-1);
 
   specmath::compsci::vanda vanda;
 
   auto start = std::chrono::high_resolution_clock::now();
 
   for (size_t i = 0; i < TRAINING_SIZE; ++i)
   {
       /* choose random pixel coordinates */
       size_t xi = dist_x(gen);
       size_t yi = dist_y(gen);
 
       boost::gil::rgb8_pixel_t pixel = view(xi, yi);
 
       /*
        * input data vec_t{xi, yi},
        * output data vec_t{R, G, B}
       */

       dataset.add( { double(xi), double(yi) },
                    { double(pixel[0]), double(pixel[1]), double(pixel[2]) } );
   }
 
Т.е. фактически мы имеем доступ только к этим живым пикселям.
Как будет выглядеть такая битая картинка? Ну, например, как предложил Old : давайте закрасим все битые пиксели чёрным цветом (0, 0, 0), а живые трогать не будем.
Вот вам и картинка: точнее набор точек на чёрном фоне (звёздное небо).

Цитировать
Ну если знаем какие "живые" а какие "битые" - то все не так уж плохо. Разумеется вещь известная и поиски готового решения здесь к месту. Но и великом здесь неплохо - просто триангуляция (по Борису Николаевичу), а дальше дело сводится к тому самому "закрашиванию треугольника" (от которого научный работник воротил нос)
Научный сотрудник и дальше будет воротить носик от триангуляции) А других подходов нет? Улыбающийся

PS Перезалил исходники примеров..
« Последнее редактирование: Октябрь 22, 2020, 13:49 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #18 : Октябрь 22, 2020, 13:54 »

Цитировать
Научный сотрудник и дальше будет воротить носик от триангуляции)
И, кстати, на то есть свои причины..
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #19 : Октябрь 22, 2020, 14:20 »

Т.е. фактически мы имеем доступ только к этим живым пикселям.
Зачем тогда затемнять задачу понятием "битых"? Проще сказать "имеется 5% пыкселей, восстановить/интерполировать по ним остальные 95%"

Научный сотрудник и дальше будет воротить носик от триангуляции)
Это не очень разумно, и вообще знать классику полезно. А если больше нравится "собирать", то триангуляция - популярнейший алгоритм, реализаций масса. Хотя здесь может и "найти все" удастся  Улыбающийся

А других подходов нет? Улыбающийся
Ну в прынцыпе можно задействовать любой из методов интерполяции начиная с простейшего "nearest neighbours" (всего их, насколько помню, 20). На практике, однако, доминирует Делоне

Обычно подобная задача возникает в контексте "lazy". Т.е. взяли точку и смотрим, может ли ее цвет быть интерполирован на основании уже имеющихся. Если нет - считаем эту точку (дорого/долго). Но если все точки даны (уж не знаю откуда), то это Вас не касается

И, кстати, на то есть свои причины..
Не вижу никаких причин мудрить и избегать стандартного/типового решения в данном случае
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #20 : Октябрь 22, 2020, 14:39 »

Цитировать
Зачем тогда затемнять задачу понятием "битых"? Проще сказать "имеется 5% пыкселей, восстановить/интерполировать по ним остальные 95%"
Согласен, ok)

Цитировать
Это не очень разумно, и вообще знать классику полезно. А если больше нравится "собирать", то триангуляция - популярнейший алгоритм, реализаций масса. Хотя здесь может и "найти все" удастся
У триангуляции есть свои минусы.
Во-первых она дорого обходится, особенно когда входной вектор это не 2D (x, y), а что то с большей размерностью.
Суть триангуляции - это просто значение в некоторой точке определяемое линейной комбинацией соседних:
res = a1 * x + a2 * y + b,
где константы a1, a2, b находятся из системы уравнений. Если размерность входного вектора будет расти, то и число констант будет расти и, соответственно, система уравнений будет разрастаться.  Это не хорошо..

Во-вторых, триангуляция - это локальная теория (локальное приближение "nearest neighbours") Это тоже не есть хорошо.
Я хочу, чтобы алгоритм, принимая решение, основывался на полученном опыте от всех   предыдущих точках..
Т.е. я хочу чтобы он учитывал статистику.  Улыбающийся
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #21 : Октябрь 22, 2020, 15:27 »

PS Перезалил исходники примеров..

не углядел - где запись в файл исходного (поломанного) изображения ?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Октябрь 22, 2020, 15:41 »

Во-первых она дорого обходится, особенно когда входной вектор это не 2D (x, y), а что то с большей размерностью.
А разве Вы формулировали задачу для большей размерности? См стартовый пост, Вы толкуете о "матрице пыкселей". Разумеется хотя бы 3D(x, y, z) точки - и триангуляция уже не катит.

В трехмерном случае сначала надо хотя бы найти ближайших - и это не так уж просто, обычно октодерево. Далее
Суть триангуляции - это просто ..
Рассмотрим такой случай, есть 3 точки

*-----*-------------*

Мы хотим интерполировать значение в правой на основании имеющихся, в том числе и 2 левых на схеме выше. Так вот триангуляция дает четкий ответ какие точки будут использоваться как "источники" а какие нет. Напр самая левая наверняка использоваться не будет, т.к. не видно как правая может попасть в тр-к со стороной из 2 левых

А без этого ясности нет, ну нашли N "соседей" и... что с ними делать?

Т.е. я хочу чтобы он учитывал статистику.  Улыбающийся
Если Ваши детки научатся красить тр-к и триангулировать - будет очень неплохо, потому что обычно выпускник ВУЗа этого не умеет. Ставьте скромные но реальные цели. А всяких там "нейронов" (и др говна) - поверьте, и без Вас наберутся
Цитировать
Кто не умеет учить - учит как надо учить
Улыбающийся
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #23 : Октябрь 23, 2020, 08:28 »

Цитировать
не углядел - где запись в файл исходного (поломанного) изображения ?
В этом примере реального поломанного файла не существует. Мы загружаем оригинальную картинку, но говорим, что нам доступны только определённые пиксели. (по сути это модель битой картинки) Задача - зная всё о живых пикселях (их координаты и цвет) восстановить всю картинку.

Цитировать
Рассмотрим такой случай, есть 3 точки
Это что сейчас, 1D задача?

Цитировать
А без этого ясности нет, ну нашли N "соседей" и... что с ними делать?
Вот в алгоритме vanda эта проблема решается и даёт неплохие результаты, подозреваю, что даже лучше чем может дать триангуляция.

Цитировать
Если Ваши детки научатся красить тр-к и триангулировать - будет очень неплохо, потому что обычно выпускник ВУЗа этого не умеет. Ставьте скромные но реальные цели. А всяких там "нейронов" (и др говна) - поверьте, и без Вас наберутся
Слава богу, детки другими вопросами занимаются, более фундаментальными)
« Последнее редактирование: Октябрь 23, 2020, 08:32 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #24 : Октябрь 23, 2020, 10:46 »

В этом примере реального поломанного файла не существует.

я это понял, но хочу увидеть глазами как оно "поломалось", а как сохранить в файл - не знаю )
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #25 : Октябрь 23, 2020, 10:48 »

Это что сейчас, 1D задача?
Нет, 2D, может и 3D. Здравый смысл говорит что для интерполяции правой точки самая левая должна быть отброшена т.к. она полностью "перекрыта" средней. Триангуляция это разруливает т.к. она автоматом создает "наилучшие" тр-ки. А вот разнообразные взвешивания нет.

Вот в алгоритме vanda эта проблема решается и даёт неплохие результаты, подозреваю, что даже лучше чем может дать триангуляция.
Не слышал о таком алгоритме, но рискну утверждать что нет, ну хотя бы потому что интерполяция по тр-кам "бесшовна", т.е. точки на ребре вычисляются одинаково по 2 смежным тр-кам. А в Ваших рез-тах прут "зубы".

Слава богу, детки другими вопросами занимаются, более фундаментальными)
А что Вы считаете "фундаментальным"? По-моему та же триангуляция - один из самых что ни на есть фундаментальных алгоритмов. И если человек ее не писал (а так, "собрал") он многих вещей не догоняет.

А все эти "нейросети" .. ну да, это интересно, забавно, в конце-концов "модно" (что не значит "плохо"). Но до "фундаментальности" там еще ой далеко Улыбающийся  Затея со статистикой по картинкам - ну а с чего Вы взяли что 2 картинки как-то коррелированы, имеют что-то общее?  Возможно Вы хотите "идти в ногу со временем", поближе к "современным технологиям". Но без понимания основ рез-т печален. Перед тем как тыкать нейросеть в каждую щель лучше поинтересоваться как люди делали "до того".

А деток все-таки жалко  Плачущий
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #26 : Октябрь 23, 2020, 11:42 »

В этом примере реального поломанного файла не существует.

я это понял, но хочу увидеть глазами как оно "поломалось", а как сохранить в файл - не знаю )


Вот добавил сохранение "поломанного" изображения

Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #27 : Октябрь 23, 2020, 11:51 »

Цитировать
А что Вы считаете "фундаментальным"? По-моему та же триангуляция - один из самых что ни на есть фундаментальных алгоритмов. И если человек ее не писал (а так, "собрал") он многих вещей не догоняет.
Ну я же не программирование и алгоритмы преподаю, а физику) Хотя в прошлом семестре был такой один курс, но там из-за пандемии всех на удалёнку отправили..

Цитировать
Затея со статистикой по картинкам - ну а с чего Вы взяли что 2 картинки как-то коррелированы, имеют что-то общее?

Я и не говорил о 2-ух и более картинках. "Статистика" собирается с одной картинки. При триангуляции, вы получаете однозначный результат на основе ближайших точек, а здесь нет. На результат будет влиять и предыстория. 

Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #28 : Октябрь 23, 2020, 12:24 »

Вот добавил сохранение "поломанного" изображения

оказалось очень просто )
итого сравнение после восстановления - очень впечатляет, разве что очень долго
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #29 : Октябрь 23, 2020, 12:39 »

Цитировать
итого сравнение после восстановления - очень впечатляет, разве что очень долго

А с триангуляцией будет ещё дольше)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: 1 [2] 3 4 ... 6   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.328 секунд. Запросов: 23.