Как сравнить два изображения и распознать рисунок на изображении? - PullRequest
3 голосов
/ 20 ноября 2008

Как сравнить два изображения и распознать рисунок на изображении независимо от его размера и размера рисунка и использовать .Net C #? Кроме того, какие алгоритмы используются для этого из Обработки изображений?

Ответы [ 9 ]

7 голосов
/ 20 ноября 2008

См. Преобразование пространственно-инвариантного элемента , сопоставление с шаблоном и преобразование Хафа Быстрое и неточное предположение может состоять в том, чтобы составить гистограмму цвета и сравнить ее. Если изображение достаточно сложное, вы можете различить несколько наборов изображений.

Для простоты предположим, что у нас есть три сегмента для R, G и B. Полностью белое изображение будет иметь (100%, 100%, 100%) для (R, G, B). Полностью красное изображение будет иметь (100%, 0%, 0%). Сложное изображение может иметь что-то вроде (23%, 53%, 34%). Если вы возьмете расстояние между точками в этом (R, G, B) пространстве, вы сможете сравнить, какая из них «ближе».

2 голосов
/ 20 ноября 2008

Методы сопоставления и распознавания изображений могут быть самыми разными. Для первого задания вы можете использовать SIFT или ручную разработку своей собственной функции расстояния на основе RGB или иным образом. Для распознавания существует огромное количество методов машинного обучения, которые вы можете использовать, более популярные методы включают Adaboost, SVM и другие методы гибридных нейронных сетей. В этой области нет недостатка в соответствующих научных работах. Google твой друг.

2 голосов
/ 20 ноября 2008

Я не специалист по распознаванию изображений, потому что однажды наткнулся на библиотеку AForge , которая написана на C # и выполняет распознавание изображений. Может быть, это может помочь ...

1 голос
/ 26 января 2016

соответствие шаблону, вы можете сделать это с EmguCV, OpendotnetCV, Aforge.net

1 голос
/ 25 февраля 2012

Возможно, вы ищете это

System.Drawing.Bitmap sourceImage = (Растровое изображение) Bitmap.FromFile (@ "C: \ SavedBMPs \ 1.jpg"); System.Drawing.Bitmap template = (Растровое изображение) Bitmap.FromFile (@ "C: \ SavedBMPs \ 2.jpg"); // создаем экземпляр алгоритма сопоставления шаблонов // (установить порог сходства на 92,5%)

       ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0.921f);
            // find all matchings with specified above similarity

            TemplateMatch[] matchings = tm.ProcessImage(sourceImage, template);
            // highlight found matchings

       BitmapData data = sourceImage.LockBits(
            new Rectangle(0, 0, sourceImage.Width, sourceImage.Height),
            ImageLockMode.ReadWrite, sourceImage.PixelFormat);
        foreach (TemplateMatch m in matchings)
        {

                Drawing.Rectangle(data, m.Rectangle, Color.White);

            MessageBox.Show(m.Rectangle.Location.ToString());
            // do something else with matching
        }
        sourceImage.UnlockBits(data);

Я предупреждаю вас, что процесс обработки изображения 1024x768 занимает около 6 секунд и находит в нем pciture размером 50x50. enter code here

1 голос
/ 31 марта 2009

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

Если вы сузите круг вопросов, я смогу помочь.

1 голос
/ 20 ноября 2008

поиск распознавания образов. Я очень мало знал об этом, кроме названия.

Предупреждение: Если это то, что вам нужно, это одна из самых сложных проблем программирования в реальном мире.

0 голосов
/ 17 апреля 2012

У ImageMagick есть интересная статья на эту тему: http://www.imagemagick.org/Usage/compare/#sub-image

0 голосов
/ 20 ноября 2008

Масштабно-инвариантное преобразование объектов (SIFT) может быть тем, что вы ищете. Однако это не так просто понять или реализовать.

...