2017-02-09 4 views
0

Я видел приложения и задавался вопросом, как я могу программно сфотографировать изображение. Определите, как его нужно преобразовать, чтобы он выглядел параллельно с камерой и не искажался в перспективе.Как изображение страницы можно выправить, чтобы выглядеть так, как если бы оно было отсканировано?

Затем объедините несколько фотографий для создания pdf-файла. Например, это приложение делает это: https://play.google.com/store/apps/details?id=com.appxy.tinyscan&hl=en

+0

http://docs.opencv.org/trunk/da/d6e/tutorial_py_geometric_transformations.html –

+0

см. [OpenCV Birdseye view без потери данных] (http : //stackoverflow.com/a/39316776/2521214), так что найдите граничные точки и используйте билинейную или бикубическую интерполяцию, чтобы выровнять изображение – Spektre

+0

, которое было так над моей головой, визуально я могу сказать, что происходит, но довольно потеряно. Любая книга, которую вы порекомендуете, даст мне скорость. –

ответ

3

Я не использую книги для таких мелочей, поэтому жаль, что я не могу рекомендовать их (особенно на английском языке). Что вам нужно сделать, это:

control points

  1. входное изображение
  2. найти Основные контуры

    идеально всю сетку, но даже внешний контур будет достаточно (в случае, если нет сетки настоящее). Вам необходимо разделить контур на горизонтальные (красные) и вертикальные (зеленые) кривые (или множество точек).

  3. образца контура кривых по 4 «равноудалена» указывает

    , как искажается изображение (а не просто повернута), то необходимо использовать по крайней мере два раза в кубической интерполяции. Для этого нам нужно 16 очков (Aqua) за патч.

  4. добавить зеркало точек, чтобы покрыть всю сетку

    на изображение зеркально отображаются (желтый) указывает только для горизонтальных контуров вы должны сделать это также вертикальные контуры (не подходят мне по образу и не сделал хотите увеличить разрешение только для этого), а также для угловых точек, чтобы вы получили 6x6 контрольных точек. Зеркало может быть сделано линейно (как и я).

Теперь преобразование осуществляется следующим образом:

  1. процесса все пиксели dst(x0,y0) целевого изображения
  2. Ручка x,y в качестве параметра для кубической интерполяции

    , если xs,ys является целевым разрешение изображения, то:

    u=(3.0*x)/xs 
    v=(3.0*y)/ys 
    

    Теперь кубическая интерполяция обычно делается по параметру t=<0.0,1.0) так
    если u=<0.0,1.0> использования t=u и контрольные точек 0,1,2,3.
    если u=<1.0,2.0) использование t=u-1.0 и контрольные точки 1,2,3,4
    , если u=<2.0,3.0> использование t=u-2.0 и контрольные точки 2,3,4,5

    То же самое для вертикальных контуров и v. Вычислить xi,yi как би-кубическую интерполяцию (u,v). И копия пиксель:

    dst(x,y)=src(xi,yi); 
    

    Это только ближайший сосед, но вы также можете использовать билинейный для этого ... Как кубических кривого Я хотел бы использовать эту polynomial.

    Идея би-кубической интерполяции проста. точка вычисления, соответствующая параметру u на 4 горизонтальных контурах. Это даст вам 4 контрольных точки для окончательной кубической интерполяции в вертикальном направлении и v в качестве параметра. Результирующая координата - это позиция вашего исходного пикселя.

Для получения дополнительной информации см:

В случае, если у вас нет сетки использовать любую информацию, которая может быть использована в качестве одного , Например, строки текста можно рассматривать как контур для этого ...

+0

Я вернусь с любым вопросом за 2 дня, это много вещей для меня, так что несите меня. –

+0

Я уже задавал этот вопрос, и никто не мог ответить на него. Это не тривиально, я бы взял курс на 6 месяцев, а потом почувствовал себя комфортно. –

+0

Я webdeveloper, если вы написали книгу на нем, я куплю его. Что-то, что делает начинающего программиста простым английским языком для передовых концепций обработки изображений. –

Смежные вопросы