Писане vectorizer изображение

Писане vectorizer изображение

С помощта на изображение vectorizer може да превежда от растерни изображения във форма вектор. Vectorizer идентифицира основните контури на определен алгоритъм, така че резултатът от работата му е винаги по-лошо от ръчно маршрута. Въпреки това, употребата му може да бъде оправдано в случаите, когато това е необходимо, за да се проследи с голям брой изображения, или изображението, когато има рязък контур и съдържа малки полутонове преходи. Неговият резултат в програмата спестява Ilda файлове.
Тук ще разгледаме как да се напише такава програма, а вие трябва да се обърне внимание. При разработването на своите инструменти, аз бях най-простите алгоритми.

Като цяло, процес на векторизация включва няколко стъпки: филтриране векторизиране на изображението се и изтриването.

1. Филтриране.
Филтриране на изображението е необходимо да се определят контурите, които след това ще се проведе на маркера. В същото време, ще се формира на изхода на двете изображения: черно и бяло (двоичен) изображение - трасиращ карта движение и цвят на изображението на този рутер ще бъдат боядисани в желания цвят вектори. Всички контури, генерирани при изхода пиксел са с дебелина от 1 - условие за качествена работа vectorizer.
Всеки пиксел в изображението е представена от три цветови компоненти. Внезапното промяна в стойността на компонента може да се посочи наличието на веригата. Тя трябва да показва по-нисък праг за задействане на яркостта, защото при ниска яркост е повишено ниво на шум (това е най-ясно се вижда в изображенията в JPG формат). Като цяло, можем да кажем, че тук има филтриране яркост с висока честота. Опитах neskoltso криптографски алгоритъм: FFT и просто изваждане на съседни пиксела. Резултатът е просто изваждане на мен по-скоро, това е, което аз използвах.
Изображението може да бъде сканиран от ляво на дясно. Т.е. в рамките на една линия е извадена от следващата предишния пиксела. В същото време, ние отбелязваме, че линиите са успоредни на линиите изчезват като тук те са представени от нискочестотни компоненти.

Подобен ефект се получава, когато сканирате от горе на долу.

Сега с помощта на операция или да се слеят двете изображения на матрицата и да получите това, което ни трябва.

по този начин в програмата използвам двойно сканиране.

Снимки с гладки преходи между цветовете, като правило, не генерират ясни контури. В този случай, дълбочината на цвета може да се намали чрез намаляване на LSBs.

2. Вектори.
Като индикатор Избрах 8-свързания рекурсивни алгоритъм за пълнене с семена, докато го променят, за да отговарят на вашите нужди.

На свой ред, се движат на всички точки на двоични карти с изображения. Веднага след като се установи един пиксел контур (бял пиксел), след това е семена и това място се управлява радиоактивен изотоп. Tracer проверява 8 съседни пиксели и ако най-малко една от тях дава възможност за движение, причинено от обикновената функция копие трейсъра. В този случай, стека се копира да координира и цвета на следващата пиксел, на която е имало преход. И сегашната пиксел на картата на движение пребоядисан черно - за да можем да се избегне повторно проследяване на една и съща пиксела. За да се избегне препълване на стека в извиквания на функции, добавени към тезгяха.
Ако следа стигнахме до последния ред на пиксел и съседните 8 точки не позволяват движение, линията е затворена рязане точка (точка празно) и продължава процеса на намиране на нова семена (т.е.. Търсене за нова бяла точка). Тази фаза трае толкова дълго, колкото процеса на сортиране, ние не стигнем до крайната точка на изображението.

Опростена функция трасиращ изглежда така:

StackCounter = StackCounter + 1

С VStack (StackCounter)
.X = X
.Y = Y
.R = ImageMatrix (X, Y) .Red
.G = ImageMatrix (X, Y) .Green
.В = ImageMatrix (X, Y) .Blue
завършва с

Ако ImageMatrix (X + 1, Y) .Status = 1 Тогава "десния
Повикване вълна (ImageMatrix, X + 1, Y)
Крайна сметка, ако
Ако ImageMatrix (X, Y + 1) .Status = 1 Тогава "надолу
Повикване вълна (ImageMatrix, X, Y + 1)
Крайна сметка, ако
Ако ImageMatrix (X - 1, Y) .Status = 1 Тогава "оставена
Обадете Wave (ImageMatrix, X - 1, Y)
Крайна сметка, ако
Ако ImageMatrix (X, Y - 1) .Status = 1 А "до
Обадете Wave (ImageMatrix, X, Y - 1)
Крайна сметка, ако
Ако ImageMatrix (X + 1, Y + 1) .Status = 1 Тогава "право надолу
Повикване вълна (ImageMatrix, X + 1, Y + 1)
Крайна сметка, ако
Ако ImageMatrix (X - 1, Y + 1) .Status = 1 Тогава "оставена надолу
Повикване вълна (ImageMatrix, X - 1, Y + 1)
Крайна сметка, ако
Ако ImageMatrix (X - 1, Y - 1) .Status = 1 Тогава "оставена на
Обадете Wave (ImageMatrix, X - 1, Y - 1)
Крайна сметка, ако
Ако ImageMatrix (X + 1, Y - 1) .Status = 1 Тогава "право нагоре
Повикване вълна (ImageMatrix, X + 1, Y - 1)
Крайна сметка, ако
End Sub

3. изтривания.
При работа генерирани индикаторния точка (или вектор) на разстояние един пиксел един от друг. Такава висока плътност на пикселите, не позволява да показва изображения на лазерен проектор. Ето защо е необходимо да се намали броят на точките.
Най-просто го направи на вертикалните и хоризонталните линии като една от координатите винаги ще бъде постоянна.
Също така, това е лесно да се намали точките, разположени в средата на другите две с една единствена стъпка. Други случаи са по-проблематични, тъй като е необходимо да се признае права линия и да се провери с определен толеранс, независимо дали са или не под него точката на подход. Този метод тук не е била реализирана.
С голяма вероятност може да се каже, че линиите, които съдържат малък брой точки (2-5) са шум. Затова те могат безопасно да бъдат отстранени, без да се нарушава качеството на изображението.

Освен оптимизиране на трасето на лъча и гъстотата на точките не са направили, тъй като Това е задачата за специални програми.

В резултат на експерименти се оказа тук тази Програмно:

Писане vectorizer изображение

Изтегляне на файлове на изпълнителната програма.
Тази програма е приложение за 32-битова. Архивът включва само изпълними файлове. Ако при стартиране ще се появи съобщение, че липсва всякакъв вид COMDLG32.OCX файл и т.н. тогава трябва да стартирайте инсталационната всяка програма, написана на Visual Basic 6. Или инсталирате самата Visual Basic.