Быстрый поиск дубликатов изображений через OpenCVC#

Место общения программистов C#
Anonymous
Быстрый поиск дубликатов изображений через OpenCV

Сообщение Anonymous »

Я пытаюсь добавить способ хранения и поиска повторяющихся изображений в MongoDB через C#. У меня есть приложение, которое позволяет пользователю создавать изображение и сохранять его на моем веб-сайте. Я храню их в MongoDB и теперь хочу найти дубликаты, но из-за большого количества изображений я не могу просто сверить новое с другими. Я хочу иметь несколько индексов и флагов, чтобы быстро находить возможные дубликаты, а затем полностью проверять их. Я использую библиотеку OpenCV, чтобы найти дескрипторы изображений и сохранить их, чтобы после этого я мог легко проверить их с новым. Что я могу использовать в качестве флагов или индексов, чтобы не искать по всей базе данных? Есть ли быстрый способ? Это пример моего кода, который позволяет найти дескрипторы:

Код: Выделить всё

Mat img1 = Cv2.ImRead("somepic", ImreadModes.Grayscale);
var orb = ORB.Create();
KeyPoint[] keyPoints;
Mat descriptors = new Mat();
orb.DetectAndCompute(img1, null, out keyPoints, descriptors);
Приведен пример сравнения двух изображений по их дескрипторам (левое исходное и правое обрезанное). Так что этот метод работает. Но как это сделать быстро на миллионах картинок?Сравнивая изображения
Я слышал, что могу разделить дескрипторы на 4-8 частей и использовать их в качестве индексов, но нет гарантии, что я найду возможен дубликат. Я также слышал о k-средних, но не понимаю, как их использовать с дескрипторами. А может есть другой способ без машинного обучения?
P.S. Я попробовал PHash, но он ужасен для обрезанных фотографий

Подробнее здесь: https://stackoverflow.com/questions/788 ... via-opencv

Вернуться в «C#»