Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.01.2011, 19:02
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию Найти и удалить черные линии с изображения

сабж =) имеется картинка (в аттаче), каким образом можно найти и удалить с неё эти линии? (под удалить подразумевается заливка белым цветом, НО! только этих линий. то есть чтобы при заливке буквы того же цвета, которые прилегают к линии, не пострадали) еще фишка в том что иногда эти линии могут иметь вид синусоиды.
вообще не представляю себе как такое сделать средствами Delphi/C++.
что посоветуете?
p.s. картинка всегда ч/б ну то есть может jpg сейчас не лучший вариант, но все черные цвета на картинке всегда clBlack, а белые - clWhite =)
Изображения
Тип файла: jpg s13.jpg (78.3 Кбайт, 39 просмотров)

Последний раз редактировалось NekitoSSSS, 06.01.2011 в 19:05.
Ответить с цитированием
  #2  
Старый 07.01.2011, 12:09
x128 x128 вне форума
Новичок
 
Регистрация: 03.02.2010
Сообщения: 64
Репутация: 133
По умолчанию

Если судить по приложенной картинке, в глаза бросается тот факт, что линии довольно жирные и от этого можно попытаться плясать. Алгоритм будет такой:
- удалить все пикселы которые не имеют "жирного соседа"
- результат наложить на оригинал с побитовым XOR

Еще одна идея, можнопросматривать пикселы окном 3х3 и когда в окне окажутся все черные пикселы (нарвались на линию), рекурсивно пройтись по всем прилегающим черным пикселам с заменой цвета.
Ответить с цитированием
  #3  
Старый 07.01.2011, 14:40
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию

кхм. тут еще одна загвоздка в том что линия не обязательно такая жирная. бывают и тоньше, но главное отличие от символов типа Ш в том, что эта линия(которую надо удалить) обычно длиннее. раза в 1.5 - ∞ . ну на примере моем это очень ярко выражено. вот именно от этого следует отталкиваться.
Ответить с цитированием
  #4  
Старый 07.01.2011, 14:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Не думаю, что окно 3х3 как-то позволит отличить линию от хвоста буквы которая влипла в нее. Тут надо что-то с обходом дерева мудрить. отсекать все ветви оставляя только ствол, получается этакий поиск наиболее длинной непрерывной линии, она и будет впоследствии затиратся.
Кстати, у вас рисунок не 2-цветный.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 07.01.2011, 14:44
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Удалить линию можно, то вот "вытащить" текст, что был под линией уже намного сложнее. А все это только потому, что тот же jpg формат все очень сильно сжимает и естественно нельзя вытащить 1-2-Nный слой картинки.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #6  
Старый 07.01.2011, 14:44
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А если скажем сделать проход по контуру и усреднение применить для резких переходов?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 07.01.2011, 16:02
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию

Цитата:
Кстати, у вас рисунок не 2-цветный.
блин, я в курсе, но я же сказал что то, над чем буду работать - будет двуцветное, исключительно clBlack и clWhite. это на форум jpg залил, т.к. бмп не помещается из-за ограничений форума. ну если так надо - то
Цитата:

Цитата:
Удалить линию можно, то вот "вытащить" текст, что был под линией уже намного сложнее.
текст восстанавливать не нужно =) нужно лиш удалить линию, которая есть, но при удалении чтоб символы, соприкасающиеся с ней (то есть проходящие РЯДОМ с линийей, но хотя бы одним пикселем сливающиеся с ней), не пострадали полностью.

Цитата:
А если скажем сделать проход по контуру и усреднение применить для резких переходов?
то есть между каждым соседним clBlack и clWhite сделать серое? если так то дальнейшие действия мне немного не понятны =)

Последний раз редактировалось NekitoSSSS, 07.01.2011 в 16:06.
Ответить с цитированием
  #8  
Старый 07.01.2011, 18:28
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Нет, я несколько про другое. Я про то как отличить продолжение линии но под небольшим углом, от буквы которая влипла в линию.
Поскольку линия это совокупность точек с координатами Х,У, причем одна из координат будет постоянной с небольшой погрешностью, то вторая будет постоянно уменьшаться или увеличиваться.
Допустим мы разобьем нашу линию на участки по 50 точек и если на этом участке мы имеем пик Х или У, то значит это буква. Остается определится с началом и концом этого пика и заменить все значения пиковых координат на среднее между началом и концом пика. Получится этакое сглаживание.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 07.01.2011, 20:39
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию

ааа. вы про резкие "повороты" линии =) а кодом можно?
Ответить с цитированием
  #10  
Старый 07.01.2011, 22:27
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Я бы пошел другим путем, не стал бы думать о формах, линиях, изгибах, вместо этого, пробегая картинку, определял бы методом заливки площадь областей покрытых черными пикселями, и если эта площадь больше N пикселей, значит это линия., где N - максимальное кол-во пикселей, используемое для начертания одной буквы. А вообще, если надо восстановить текст, то легче его пропустить через FineReader или ему подобное ПО, и после доредактировать.
Ответить с цитированием
  #11  
Старый 08.01.2011, 11:50
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию

Цитата:
А вообще, если надо восстановить текст, то легче его пропустить через FineReader или ему подобное ПО
та емае я нимагу. ну воще. если бы надо было распознать текст - я об этом бы так и написал! сейчас стоит проблема удалить линии, не потеряв при этом символы полностью. а вообще метож заливки как таковой не вариант
вот например.
имеем букву
Код:
П
и линию в 1px
Код:
___
, по длинне эквивалентна сумме отрезков из которых состоит П. разница лишь в том что ΔX в случае с линией будет больше чем в букве, но заливка то покажет что кол-во точек одинаково.
да и сама заливка слишком медленный процесс. это считай от каждого a[i,j] мы будем заливать а потом сравнивать картинки..... %)

Последний раз редактировалось NekitoSSSS, 08.01.2011 в 12:01.
Ответить с цитированием
  #12  
Старый 08.01.2011, 14:42
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Может капчу покажем???
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:11.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025