Поиск по набору изображений для аналогичного изображения
возвращает индексы, соответствующие изображениям в imageIDs
= retrieveImages(queryImage
,imageIndex
)imageIndex
которые визуально аналогичны изображению запроса. The imageIDs
выход содержит индексы в ранжированном порядке от наиболее к наименее подобному соответствию.
[
опционально возвращает счета подобия, используемые для ранжирования результатов поиска изображений. The 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.
Задайте изображение запроса и информация только для чтения. Информация только для чтения очерчивает объект, слон, для поиска.
queryImage = imread('clutteredDesk.jpg'); queryROI = [130 175 330 365]; figure imshow(queryImage) rectangle('Position',queryROI,'EdgeColor','yellow')
Можно также использовать imrect
функция для интерактивного выбора информация только для чтения. Для примера, 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)
Извлечение наилучших соответствий. The 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 изображением <reservedrangesplaceholder2>-by-3 truecolor или как M N 2-м изображением оттенков серого.
Типы данных: 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)]
(дефолт) | [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0>] Область поиска изображений запроса, заданная как разделенная разделенными запятой парами, состоящая из 'ROI
'и [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0>] вектор.
imageIDs
- Ранжированный индекс извлеченных изображенийРанжированный индекс извлеченных изображений, возвращенный как вектор M -by-1. Идентификаторы изображений возвращаются в ранжированном порядке от наиболее к наименее подобному совпадающему изображению.
scores
- Метрика подобияМетрика подобия, возвращенная как вектор N -by-1. Этот выход содержит счета, которые соответствуют извлеченным изображениям в imageIDs
выход. Счета вычисляются с помощью подобия косинуса и варьируются от 0 до 1.
imageWords
- Объект для хранения визуальных назначений словvisualWords
объектОбъект для хранения визуальных назначений слов, возвращенный как visualWords
объект. Объект хранит визуальные назначения слов queryImage
и их местоположения на этом изображении.
[1] Сивич, Дж. И. Зиссерман. Видео Google: Подход поиска текста к соответствию объектов в видео. ICCV (2003) стр. 1470-1477.
[2] Philbin, J., O. Chum, M. Isard, J. Sivic, and A. Zisserman. Поиск объектов с большими словарями и быстрым пространственным совпадением. CVPR (2007).
bagOfFeatures
| evaluateImageRetrieval
| imageDatastore
| imageSet
| invertedImageIndex
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.