Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CylindricalSurfaceDewarper.cpp (stable or nonstable)? #136

Open
zvezdochiot opened this issue Aug 28, 2023 · 0 comments
Open

CylindricalSurfaceDewarper.cpp (stable or nonstable)? #136

zvezdochiot opened this issue Aug 28, 2023 · 0 comments

Comments

@zvezdochiot
Copy link
Contributor

zvezdochiot commented Aug 28, 2023

Hi @trufanov-nok .

Речь поведу за CylindricalSurfaceDewarper.cpp и поведу на русском.

Есть два очень похожих варианта построения цилиндрической модели: стабильный (stable) и нестабильный (nonstable).

Почему так названы варианты?
Потому что у нестабильного периодически наблюдается сбой на нулевом столбце сетки и она дёргается или её скашивает и приходится доводить угловую точку, чтобы вернуть первые ячейки в нормальное состояние.

Какие ещё различия в вариантах?
Стабильный вариант работает не так, как задумано. У него средняя линия всегда ровная, независимо от кривизны верхней и нижней линии сетки.

У вас испоьзуется стабильный вариант:

Vec2d const img_straight_line_pt(m_pln2img(Vec2d(pln_x, m_plnStraightLineY)));
double const img_directrix1_proj(projector.projectionScalar(img_directrix1_pt));
double const img_directrix2_proj(projector.projectionScalar(img_directrix2_pt));
double const img_straight_line_proj(projector.projectionScalar(img_straight_line_pt));

Vec2d const img_straight_line_pt(m_pln2img(Vec2d(pln_x, m_plnStraightLineY)));
double const img_directrix1_proj(projector.projectionScalar(img_directrix1_pt));
double const img_directrix2_proj(projector.projectionScalar(img_directrix2_pt));
double const img_straight_line_proj(projector.projectionScalar(img_straight_line_pt));

Я же ни под какой "стабильностью" не подписывался. Мне нужно, чтобы деварп работал должным образом. Поэтому в STEX я использую нестабильный вариант:

    double const img_directrix1_proj(projector.projectionScalar(img_directrix1_pt));
    double const img_directrix2_proj(projector.projectionScalar(img_directrix2_pt));
    double const img_directrix0_proj = 0.5 * (img_directrix1_proj + img_directrix2_proj);
    Vec2d const img_straight_line_pt(m_pln2img(Vec2d(pln_x, img_directrix0_proj)));
    double const img_straight_line_proj(projector.projectionScalar(img_straight_line_pt));
    double const img_directrix1_proj(projector.projectionScalar(img_directrix1_pt));
    double const img_directrix2_proj(projector.projectionScalar(img_directrix2_pt));
    double const img_directrix0_proj = 0.5 * (img_directrix1_proj + img_directrix2_proj);
    Vec2d const img_straight_line_pt(m_pln2img(Vec2d(pln_x, img_directrix0_proj)));
    double const img_straight_line_proj(projector.projectionScalar(img_straight_line_pt));

PS: Исхожу из того, что m_plnStraightLineY всегда равен 0.5. При каких обстоятельствах он не равен 0.5? Мне неведомо. Сколько не дебажил, всегда выдаёт 0.5. На случай, когда такое всё-таки произойдёт, код можно переписать следующим образом:

    double const img_directrix1_proj(projector.projectionScalar(img_directrix1_pt));
    double const img_directrix2_proj(projector.projectionScalar(img_directrix2_pt));
    double const img_directrix0_proj = 0.5 * (img_directrix1_proj + img_directrix2_proj);
    double const img_directrix12f_proj = (1.0 - m_plnStraightLineY) * img_directrix1_proj
                                       + m_plnStraightLineY * img_directrix2_proj;
    Vec2d const img_straight_line_pt(m_pln2img(Vec2d(pln_x, img_directrix12f_proj)));
    double const img_straight_line_proj(projector.projectionScalar(img_straight_line_pt));

Различие в результатах деварпинга я уже публиковал на Ru.Board.

STA (stable) vs STEX (nonstable)
st-dewarp-a st-dewarp-ex
Правая граница в стабильном варианте отрабатывается категорически не должным образом. Верхний контур легко "подправляется" клавишей [Del] и доводкой мышью

Такие вот дела.



PS: 600dpi:
B199
B199_2R

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant