Поисковое изображение установлено для подобного изображения
возвращает идентификаторы изображений imageIDs
= retrieveImages(queryImage
,imageIndex
)imageIDs
это соответствует изображениям в 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. * Creating a 20000 word visual vocabulary. * Number of levels: 1 * Branching factor: 20000 * Number of clustering steps: 1 * [Step 1/1] Clustering vocabulary level 1. * Number of features : 23373 * Number of clusters : 20000 * Initializing cluster centers...100.00%. * Clustering...completed 18/100 iterations (~0.65 seconds/iteration)...converged in 18 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. * Creating a 2944 word visual vocabulary. * Number of levels: 1 * Branching factor: 2944 * Number of clustering steps: 1 * [Step 1/1] Clustering vocabulary level 1. * Number of features : 2944 * Number of clusters : 2944 * Initializing cluster centers...100.00%. * Clustering...completed 1/100 iterations (~0.06 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 = 12x1 uint32 column vector
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. * Creating a 20000 word visual vocabulary. * Number of levels: 1 * Branching factor: 20000 * Number of clustering steps: 1 * [Step 1/1] Clustering vocabulary level 1. * Number of features : 23373 * Number of clusters : 20000 * Initializing cluster centers...100.00%. * Clustering...completed 18/100 iterations (~0.72 seconds/iteration)...converged in 18 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, :);
Повторно оцените результаты поиска процентом inliers. Сделайте это, когда геометрическая процедура проверки будет применена к верхней части N результаты поиска. Те изображения с более высоким процентом inliers, более вероятно, будут релевантны.
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] ImageID: [1 2 3 4 5 6] MatchThreshold: 0.2000 WordFrequencyRange: [0 1]
queryImage = readimage(imds, 1); indices = retrieveImages(queryImage,imageIndex);
queryImage
— Введите изображение запросаВведите изображение запроса или в виде M-by-N-by-3 изображение истинного цвета или в виде M-by-N 2D полутоновое изображение.
Типы данных: 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
— Максимальное количество результатов
(значение по умолчанию) | числовое значениеМаксимальное количество результатов возвратиться в виде разделенной запятой пары, состоящей из 'NumResults
'и числовое значение. Установите это значение к Inf
возвратить как можно больше соответствующих изображений.
ROI
— Запросите область поиска изображений[1 1 size(queryImage,2) size(queryImage,1)]
(значение по умолчанию) | [x y width height] векторЗапросите область поиска изображений в виде разделенной запятой пары, состоящей из 'ROI
'и [x y width height] вектор.
Metric
— Метрика подобия'cosine'
(значение по умолчанию) | 'L1'
Метрика подобия раньше оценивала результаты извлечения изображений в виде 'cosine'
или 'L1'
[3].
imageIDs
— Оцениваемый индекс полученных изображенийОцениваемый индекс полученных изображений, возвращенных как M-by-1 вектор. Идентификаторы изображений возвращены в оцениваемом порядке от большинства до наименее подобного совпадающего изображения.
imageWords
— Объект для хранения визуальных присвоений словаvisualWords
объектОбъект для хранения визуальных присвоений слова, возвращенных как visualWords
объект. Объектно-ориентированная память визуальные присвоения слова queryImage
и их местоположения в том изображении.
[1] Сивич, J. и А. Зиссермен. Видео Google: текстовое извлечение приближается, чтобы возразить соответствию в видео. ICCV (2003) пг 1470-1477.
[2] Philbin, J. O. Приятель, М. Исард, Й. Сивич и А. Зиссермен. Объектное извлечение с большими словарями и быстро пространственное соответствие. CVPR (2007).
[3] Гальвес-Лопес, Дориан и Хуан Д. Тардос. Мешки двоичных слов для быстрого распознавания места в последовательностях изображений. Транзакции IEEE на Робототехнике 28.5 (2012): 1188-1197.
evaluateImageRetrieval
| imageDatastore
| imageSet
| bagOfFeatures
| invertedImageIndex
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.