Closed zvezdochiot closed 1 month ago
@zvezdochiot
А вот этот вот код куда-нибудь вставил?
emit reloadRequested();
emit invalidateThumbnail(m_pageId);
При изменении значения слайдера надо добавить, я так понимаю. Может только первой строчки должно быть достаточно, надо смотреть
@plzombie .
Как куда? В OptionsWidget.cpp
, в функции событий ползунка. Только я ж говорю, значения то меняются, а вот как заставить сетку перестроится, как это происходит в "Восприятии глубины" - это осталось для меня тайной.
А это тоже добавлял?
double const depth_perception = m_pageParams.dewarpingParams().depthPerception();
emit depthPerceptionSetByUser(depth_perception);
Оно там внутри обновляет изображение https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/blob/d9edb7019b5d0750146d1649d4f865586b3433c3/src/filters/deskew/Task.cpp#L843 https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/blob/d9edb7019b5d0750146d1649d4f865586b3433c3/src/filters/deskew/DewarpingView.cpp#L249
@plzombie , да я пытался про-grep-ить depthPerceptionSetByUser
. Обломился. Не понимаю я этой магии. Поэтому тупо копировал всё с depthPerception
.
@zvezdochiot просто со старым значением попробуй вызвать
@plzombie , так всё работает, за исключением интерактивности. Перелистнул на другую страницу, вернулся обратно - вуаля! Только как с таким работать то?
@zvezdochiot Надо в https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/blob/d9edb7019b5d0750146d1649d4f865586b3433c3/src/filters/deskew/DewarpingView.cpp#L249 на update();
точку остановки поставить и посмотреть, куда там проваливается дальше. Почему не перерисовывается DewarpingView
Или поставить точку остановки в DewarpingView::onPaint
и посмотреть, откуда она вызывается, при каких условиях
@plzombie , понял тебя. Как будет настроение, попробую "ковырнуть замазку". Правда я по большей части такие "трюки" через qDebug()
делаю. Но у всех свои замашки.
Деварп тут хорош, да не очень 😄. Первое, что в нем надо починить - пропрорции.
Одни страницы он делает широкими (плющит):
Другие страницы делает узкими (колбасит):
@noobie-iv say:
надо починить
:information_source: Починить или поломать? Как ни странно все эти "эффекты" укладываются в единную мат. модель. Ломать эту модель совсем не стоит. А вот компенсировать эти "эффекты" можно, но только дополнительной отдельной мат. моделью: дополнительными множителями масштабных компонент трансформации (возможно задаваемых вручную) по X и Y. Но это уже строго за пределами данных алгоритмов: это уже строго отдельно.
:question: И самое важное: А что взамен? Что то я не наблюдаю ни разу этого самого "взамен".
PS: А вы на этих страницах "Восприятие глубины" (Depth Perception) регулировать не пробовали? (значение поумолчанию == 2.0)
PS2: Вы scantailor-deviant ещё мержить не собираетесь? По-моему уже пора. Работает же. Как работает? - это обсуждаемо, но работает.
Да вроде починить надо. Можно прогнать в STEX все ту же книгу с dwg.ru: https://elima.ru/books/?id=7081. Там видно, что некоторые страницы просто на глаз получаются сильно широкие, а некоторые - слишком узкие. И это не лечится настройкой глубины.
Честно говоря, там страницы не просто развернуты, а еще и местами примяты, так что и цилиндрическая развертка работает так себе; средние строки остаются кривыми, даже когда верх/низ идеально ровный. Но на такое нужен уже вообще другой код, с трассировкой и разверткой всех строк (или строк по выбору). А пока какой-нибудь дополнительный параметр "Вес исходных пропорций" явно нужен.
В STD автоматика еще не работает, только ручная развертка; при включении автоматики вместо работы получаются вылеты. Видимо, я неправильно вручную развернул шаблоны, которые не собирались. Но я уже нашел, как их починить.
Автоматика с поправленными шаблонами запустилась в мусорной неопубликованной ветке, которую я сейчас пересобираю, и потом запушу. По непонятной причине там сломан Watershed-фильтр, и маску страницы я просто временно заливаю белым. Плюс там вообще не показывают искажения превьюшки-заглушки. И нет применения "ко всем страницам". С точки зрения пользователя это все еще нерабочая программа.
Есть на гитхабе ночные сборки? Вот туда такое можно бы заливать.
@noobie-iv say:
Есть на гитхабе ночные сборки? Вот туда такое можно бы заливать.
Pre-release? В тех же самых релизах, выбирается тип релиза. Ffmpeg вообще использует бота для ежедневных автосборок.
PS: Эту "проблему" можно решить одним числом: внести где-нибудь параметр xy_cor
, близким к единице. В транформации домножить масштабные компоненты:
scale_x *= xy_cor;
scale_y /= xy_cor;
или, что более удобно, пользовать прибавку к единице:
xy_cor = 1.0 + dxy_cor*1e-3;
PS2: По поводу "что взамен?". Для сравнения перспективных трансформаций:
Все-таки эта книжка очень хороша для тестирования. Одни страницы в ней высотой 3300px, другие 2200. Даже на одной фотке левая страница может быть нормальной ширины, а правая - зауженная. Возможно, оператор был пьян, а возможно, работал в условиях сильной болтанки. STEX такие страницы разворачивает в чуть более узкие верстии, чем STU, но в принципе не справляются оба. Думал, можно сделать микс из двух алгоритмов, но потестировав книжку, вижу, что это не поможет. Подозреваю, что такое можно восстановить в автомате, только если трассировать каждую строку и каждую букву. Видимо, относительно простым решением будет добавить масштабные множители к ширине и высоте на стадии разметки страниц, где уже должны быть направляющие, под которые можно подгонять размеры.
:information_source: Повесил корекцию промежуточных кривых на "Восприятие глубины", зарезервировав вход под отдельный параметр. Так то по уму нужен отдельный регулятор, но пока меня устраивает и один регулятор на два параметра.
Hi all.
It is possible to adjust the curvature of intermediate lines in CylindricalSurfaceDewarper.: https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/blob/d9edb7019b5d0750146d1649d4f865586b3433c3/src/dewarping/CylindricalSurfaceDewarper.cpp#L130-L132 to:
and: https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/blob/d9edb7019b5d0750146d1649d4f865586b3433c3/src/dewarping/CylindricalSurfaceDewarper.cpp#L173-L175 to:
Дальше по-русски:
Использовал уже существующий механизм: https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/blob/d9edb7019b5d0750146d1649d4f865586b3433c3/src/dewarping/DepthPerception.h#L31 сделал ещё один объект этого класса и протащил его до: https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/blob/d9edb7019b5d0750146d1649d4f865586b3433c3/src/filters/deskew/OptionsWidget.h#L78-L80
Только вот небольшая засада - не обновляется сетка при движениях пользунка, в отличии от "Восприятия глубины". При этом сам параметр меняется. Ежели перелистнуть на другую страницу и вернуться, то изменения кривизны промежуточных линий происходят. Но это же никуда не годится, для работы надо видеть изменения сетки во время регулировки ползунка.
Такие вот дела, такая вот напасть.