![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 сабж =) имеется картинка (в аттаче), каким образом можно найти и удалить с неё эти линии? (под удалить подразумевается заливка белым цветом, НО! только этих линий. то есть чтобы при заливке буквы того же цвета, которые прилегают к линии,  не пострадали) еще фишка в том что иногда эти линии могут иметь вид синусоиды. 
		
	
		
		
			вообще не представляю себе как такое сделать средствами Delphi/C++. что посоветуете? p.s. картинка всегда ч/б ну то есть может jpg сейчас не лучший вариант, но все черные цвета на картинке всегда clBlack, а белые - clWhite =) Последний раз редактировалось NekitoSSSS, 06.01.2011 в 19:05.  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Если судить по приложенной картинке, в глаза бросается тот факт, что линии довольно жирные и от этого можно попытаться плясать. Алгоритм будет такой: 
		
	
		
		
		
		
		
	
		
		
	
	
	- удалить все пикселы которые не имеют "жирного соседа" - результат наложить на оригинал с побитовым XOR Еще одна идея, можнопросматривать пикселы окном 3х3 и когда в окне окажутся все черные пикселы (нарвались на линию), рекурсивно пройтись по всем прилегающим черным пикселам с заменой цвета.  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 кхм. тут еще одна загвоздка в том что линия не обязательно такая жирная. бывают и тоньше, но главное отличие от символов типа Ш в том, что эта линия(которую надо удалить) обычно длиннее. раза в 1.5 - ∞ . ну на примере моем это очень ярко выражено. вот именно от этого следует отталкиваться. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Не думаю, что окно 3х3 как-то позволит отличить линию от хвоста буквы которая влипла в нее. Тут надо что-то с обходом дерева мудрить. отсекать все ветви оставляя только ствол, получается этакий поиск наиболее длинной непрерывной линии, она и будет впоследствии затиратся. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Кстати, у вас рисунок не 2-цветный.  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Удалить линию можно, то вот "вытащить" текст, что был под линией уже намного сложнее. А все это только потому, что тот же jpg формат все очень сильно сжимает и естественно нельзя вытащить 1-2-Nный слой картинки. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 А если скажем сделать проход по контуру и усреднение применить для резких переходов? 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 Последний раз редактировалось NekitoSSSS, 07.01.2011 в 16:06.  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Нет, я несколько про другое. Я про то как отличить продолжение линии но под небольшим углом, от буквы которая влипла в линию.  
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Поскольку линия это совокупность точек с координатами Х,У, причем одна из координат будет постоянной с небольшой погрешностью, то вторая будет постоянно уменьшаться или увеличиваться. Допустим мы разобьем нашу линию на участки по 50 точек и если на этом участке мы имеем пик Х или У, то значит это буква. Остается определится с началом и концом этого пика и заменить все значения пиковых координат на среднее между началом и концом пика. Получится этакое сглаживание.  | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 ааа. вы про резкие "повороты" линии =) а кодом можно? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Я бы пошел другим путем, не стал бы думать о формах, линиях, изгибах, вместо этого, пробегая картинку, определял бы методом заливки площадь областей покрытых черными пикселями, и если эта площадь больше N пикселей, значит это линия., где N - максимальное кол-во пикселей, используемое для начертания одной буквы. А вообще, если надо восстановить текст, то легче его пропустить через FineReader или ему подобное ПО, и после доредактировать. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 вот например. имеем букву Код: 
	П Код: 
	___ да и сама заливка слишком медленный процесс. это считай от каждого a[i,j] мы будем заливать а потом сравнивать картинки..... %) Последний раз редактировалось NekitoSSSS, 08.01.2011 в 12:01.  | 
| 
		 
			 
			#12  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Может капчу покажем??? 
		
	
		
		
		
		
		
	
		
		
	
	
	 |