Функция поиска с использованием изображений - PullRequest
1 голос
/ 03 декабря 2011

Можно ли сделать снимок линии и проанализировать черную линию по сравнению с белым фоном и создать функцию наилучшего соответствия линии, используя анализ изображений?Если да, то в каком направлении следует начать поиск?

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Итак, из ваших комментариев кажется, что вам нужно получить только список точек, которые представляют черную линию.Это достаточно просто, поэтому этот пример просто захватывает черные пиксели и сохраняет их координаты {x, y}.Если вам нужно что-то более сложное, вы можете добавить его поверх этого.

using System.Drawing;

...

List<Point> GetBlackPixels( Bitmap bmp )
{
    var points = new List<Point>();
    for( int y = 0; y < bmp.Height; ++y )
    {
        for( int x = 0; x < bmp.Width; ++x )
        {
            if( bmp.GetPixel( x, y ) == Color.Black )
            {
                points.Add( new Point( x, y );
            }
        }
    }    
}

Обратите внимание, что GetPixel относительно медленно.Это не значит, что он не подходит для вашего варианта использования , это просто означает, что на больших изображениях вам может понадобиться что-то быстрее.Если это так, вызовите LockBits на Bitmap и получите указатель непосредственно на память.

Помните, однако, прежде чем идти по этому пути, сначала используйте более простую версию (которую я опубликовал).GDI + может подойти вам.

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

0 голосов
/ 03 декабря 2011

Запустите линейную регрессию по точкам, которые считаются черными (т. Е. Темнее заданного порогового значения).Этот подход терпим к артефактам сжатия изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...