Набор изображений поиска для похожего изображения
возвращает индексы, соответствующие изображениям в пределах imageIDs = retrieveImages(queryImage,imageIndex)imageIndex которые визуально похожи на изображение запроса. imageIDs вывод содержит индексы в ранжированном порядке, от наибольшего до наименьшего сходства.
[ дополнительно возвращает оценки подобия, используемые для ранжирования результатов извлечения изображения. imageIDs,scores] = retrieveImages(queryImage,imageIndex)scores выходные данные содержат соответствующие баллы от 0 до 1.
[ дополнительно возвращает визуальные слова в imageIDs,scores,imageWords] = retrieveImages(queryImage,imageIndex)queryImage которые используются для поиска похожих изображений.
[ использует дополнительные параметры, указанные одним или несколькими imageIDs,___] = retrieveImages(queryImage,imageIndex,Name,Value)Name,Value пары аргументов, используя любой из предшествующих синтаксисов.
Создайте набор изображений обложек книг.
dataDir = fullfile(toolboxdir('vision'),'visiondata','bookCovers'); bookCovers = imageDatastore(dataDir);
Просмотрите набор данных.
thumbnailGallery = []; for i = 1:length(bookCovers.Files) I = readimage(bookCovers,i); thumbnail = imresize(I,[300 300]); thumbnailGallery = cat(4,thumbnailGallery,thumbnail); end figure montage(thumbnailGallery);

Проиндексировать набор изображений. Этот шаг может занять несколько минут.
imageIndex = indexImages(bookCovers);
Creating an inverted image index using Bag-Of-Features. ------------------------------------------------------- Creating Bag-Of-Features. ------------------------- * Selecting feature point locations using the Detector method. * Extracting SURF features from the selected feature point locations. ** detectSURFFeatures is used to detect key points for feature extraction. * Extracting features from 58 images...done. Extracted 29216 features. * Keeping 80 percent of the strongest features from each category. * Balancing the number of features across all image categories to improve clustering. ** Image category 1 has the least number of strongest features: 23373. ** Using the strongest 23373 features from each of the other image categories. * Using K-Means clustering to create a 20000 word visual vocabulary. * Number of features : 23373 * Number of clusters (K) : 20000 * Initializing cluster centers...100.00%. * Clustering...completed 7/100 iterations (~0.45 seconds/iteration)...converged in 7 iterations. * Finished creating Bag-Of-Features Encoding images using Bag-Of-Features. -------------------------------------- * Encoding 58 images...done. Finished creating the image index.
Выберите и просмотрите изображение запроса.
queryDir = fullfile(dataDir,'queries',filesep); queryImage = imread([queryDir 'query3.jpg']); imageIDs = retrieveImages(queryImage,imageIndex);
Отображение изображения запроса и его наилучшего соответствия.
bestMatch = imageIDs(1);
bestImage = imread(imageIndex.ImageLocation{bestMatch});
figure
imshowpair(queryImage,bestImage,'montage')
Поиск набора изображений для объекта с использованием области, представляющей интерес (ROI) для изображения запроса.
Определите набор изображений для поиска.
imageFiles = ... {'elephant.jpg', 'cameraman.tif', ... 'peppers.png', 'saturn.png',... 'pears.png', 'stapleRemover.jpg', ... 'football.jpg', 'mandi.tif',... 'kids.tif', 'liftingbody.png', ... 'office_5.jpg', 'gantrycrane.png',... 'moon.tif', 'circuit.tif', ... 'tape.png', 'coins.png'}; imds = imageDatastore(imageFiles);
Создание индекса поиска.
imageIndex = indexImages(imds);
Creating an inverted image index using Bag-Of-Features. ------------------------------------------------------- Creating Bag-Of-Features. ------------------------- * Selecting feature point locations using the Detector method. * Extracting SURF features from the selected feature point locations. ** detectSURFFeatures is used to detect key points for feature extraction. * Extracting features from 16 images...done. Extracted 3680 features. * Keeping 80 percent of the strongest features from each category. * Balancing the number of features across all image categories to improve clustering. ** Image category 1 has the least number of strongest features: 2944. ** Using the strongest 2944 features from each of the other image categories. * Using K-Means clustering to create a 20000 word visual vocabulary. * Number of features : 2944 * Number of clusters (K) : 2944 * Initializing cluster centers...100.00%. * Clustering...completed 1/100 iterations (~0.05 seconds/iteration)...converged in 1 iterations. * Finished creating Bag-Of-Features Encoding images using Bag-Of-Features. -------------------------------------- * Encoding 16 images...done. Finished creating the image index.
Укажите изображение запроса и ROI. ROI описывает объект, слон, для поиска.
queryImage = imread('clutteredDesk.jpg'); queryROI = [130 175 330 365]; figure imshow(queryImage) rectangle('Position',queryROI,'EdgeColor','yellow')

Вы также можете использовать imrect для интерактивного выбора ROI. Например, queryROI = getPosition(imrect)
Поиск изображений, содержащих объект.
imageIDs = retrieveImages(queryImage,imageIndex,'ROI',queryROI)imageIDs = 12×1
1
11
6
12
2
3
8
10
13
14
⋮
Отображение наилучшего соответствия.
bestMatch = imageIDs(1);
figure
imshow(imageIndex.ImageLocation{bestMatch})
estimateGeometricTransform2D ФункцияИспользуйте расположение визуальных слов для проверки наилучшего результата поиска. Чтобы ранжировать результаты поиска на основе геометрической информации, повторите эту процедуру для первых N результатов поиска.
Укажите расположение изображений.
dataDir = fullfile(toolboxdir('vision'),'visiondata','bookCovers'); bookCovers = imageDatastore(dataDir);
Проиндексировать набор изображений. Этот процесс может занять несколько минут.
imageIndex = indexImages(bookCovers);
Creating an inverted image index using Bag-Of-Features. ------------------------------------------------------- Creating Bag-Of-Features. ------------------------- * Selecting feature point locations using the Detector method. * Extracting SURF features from the selected feature point locations. ** detectSURFFeatures is used to detect key points for feature extraction. * Extracting features from 58 images...done. Extracted 29216 features. * Keeping 80 percent of the strongest features from each category. * Balancing the number of features across all image categories to improve clustering. ** Image category 1 has the least number of strongest features: 23373. ** Using the strongest 23373 features from each of the other image categories. * Using K-Means clustering to create a 20000 word visual vocabulary. * Number of features : 23373 * Number of clusters (K) : 20000 * Initializing cluster centers...100.00%. * Clustering...completed 7/100 iterations (~0.61 seconds/iteration)...converged in 7 iterations. * Finished creating Bag-Of-Features Encoding images using Bag-Of-Features. -------------------------------------- * Encoding 58 images...done. Finished creating the image index.
Выберите и просмотрите изображение запроса.
queryDir = fullfile(dataDir,'queries',filesep); queryImage = imread([queryDir 'query3.jpg']); figure imshow(queryImage)

Извлеките лучшие совпадения. queryWords вывод содержит информацию о местоположении визуальных слов для изображения запроса. Эта информация используется для проверки результатов поиска.
[imageIDs, ~, queryWords] = retrieveImages(queryImage,imageIndex);
Найдите наилучшее соответствие для изображения запроса, извлекая визуальные слова из индекса изображения. Индекс изображения содержит визуальную информацию слова для всех изображений в индексе.
bestMatch = imageIDs(1);
bestImage = imread(imageIndex.ImageLocation{bestMatch});
bestMatchWords = imageIndex.ImageWords(bestMatch);Создание набора предварительных совпадений на основе визуальных назначений слов. Каждое визуальное слово в запросе может иметь несколько совпадений из-за жесткого квантования, используемого для назначения визуальных слов.
queryWordsIndex = queryWords.WordIndex; bestMatchWordIndex = bestMatchWords.WordIndex; tentativeMatches = []; for i = 1:numel(queryWords.WordIndex) idx = find(queryWordsIndex(i) == bestMatchWordIndex); matches = [repmat(i, numel(idx), 1) idx]; tentativeMatches = [tentativeMatches; matches]; end
Отображение расположения точек для предварительных совпадений. Есть много плохих матчей.
points1 = queryWords.Location(tentativeMatches(:,1),:);
points2 = bestMatchWords.Location(tentativeMatches(:,2),:);
figure
showMatchedFeatures(queryImage,bestImage,points1,points2,'montage')
Удаление плохих визуальных назначений слов с помощью estimateGeometricTransform2D функция. Сохраните назначения, соответствующие допустимому геометрическому преобразованию.
[tform,inlierIdx] = ... estimateGeometricTransform2D(points1,points2,'affine',... 'MaxNumTrials',2000); inlierPoints1 = points1(inlierIdx, :); inlierPoints2 = points2(inlierIdx, :);
Ранжирование результатов поиска по проценту входов. Это делается, когда процедура геометрической проверки применяется к результатам поиска верхнего N. Эти изображения с более высоким процентом входов, скорее всего, будут релевантными.
percentageOfInliers = size(inlierPoints1,1)./size(points1,1); figure showMatchedFeatures(queryImage,bestImage,inlierPoints1,... inlierPoints2,'montage')

Применить расчетное преобразование.
outputView = imref2d(size(bestImage)); Ir = imwarp(queryImage, tform, 'OutputView', outputView); figure imshowpair(Ir,bestImage,'montage')

Используйте evaluateImageRetrieval для выбора соответствующих параметров поиска.
Создание набора изображений.
setDir = fullfile(toolboxdir('vision'),'visiondata','imageSets','cups'); imds = imageDatastore(setDir, 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
Проиндексировать набор изображений.
imageIndex = indexImages(imds,'Verbose',false);Настройка параметров поиска изображений.
imageIndex.MatchThreshold = 0.2; imageIndex.WordFrequencyRange = [0 1]
imageIndex =
invertedImageIndex with properties:
ImageLocation: {6x1 cell}
ImageWords: [6x1 vision.internal.visualWords]
WordFrequency: [1x1366 double]
BagOfFeatures: [1x1 bagOfFeatures]
MatchThreshold: 0.2000
WordFrequencyRange: [0 1]
queryImage = readimage(imds, 1); indices = retrieveImages(queryImage,imageIndex);
queryImage - Входное изображение запросаВходное изображение вопроса, определенное или как M N 3 truecolor изображениями или как 2-е изображение оттенков серого M на Н.
Типы данных: single | double | int16 | uint8 | uint16 | logical
imageIndex - Индекс поиска изображенияinvertedImageIndex объектИндекс поиска изображения, указанный как invertedImageIndex объект. indexImages функция создает invertedImageIndex , в котором хранятся данные, используемые для поиска изображения.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'NumResults',25 устанавливает 'NumResults' свойство для 25'NumResults' - Максимальное количество результатов20 (по умолчанию) | числовое значениеМаксимальное количество возвращаемых результатов, указанное как пара, разделенная запятыми, состоящая из 'NumResultsи числовое значение. Задайте для этого значения значение Inf чтобы вернуть как можно больше совпадающих изображений.
'ROI' - Запрос области поиска изображений[1 1 size(queryImage,2) size(queryImage,1)] (по умолчанию) | [x y width height] векторЗапрос области поиска изображения, указанной как разделенная запятыми пара, состоящая из "ROIи вектор [x y width height].
imageIDs - Ранжированный индекс извлеченных изображенийРанжированный индекс извлекаемых изображений, возвращаемый как вектор M-by-1. Идентификаторы изображений возвращаются в ранжированном порядке из наиболее или наименее сходного совпадающего изображения.
scores - Метрика подобияМетрика подобия, возвращаемая как вектор N-by-1. Этот вывод содержит оценки, которые соответствуют извлеченным изображениям в imageIDs выход. Оценки вычисляются с использованием косинусного подобия и находятся в диапазоне от 0 до 1.
imageWords - Объект для хранения визуальных назначений словvisualWords объектОбъект для хранения визуальных назначений слов, возвращаемый как visualWords объект. Объект хранит визуальные назначения слов queryImage и их расположение в этом образе.
[1] Сивич, Дж. и А. Зиссерман. Видео Google: Поиск текста подход к совпадению объектов в видео. ICCV (2003) pg 1470-1477.
[2] Филбин, Дж., О. Чум, М. Изард, Дж. Сивич и А. Зиссерман. Извлечение объектов с большими словарями и быстрым пространственным согласованием. CVPR (2007).
bagOfFeatures | evaluateImageRetrieval | imageDatastore | imageSet | invertedImageIndex
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.