Поисковое изображение установлено для подобного изображения
imageIDs = retrieveImages(queryImage,imageIndex)
[imageIDs,scores]
= retrieveImages(queryImage,imageIndex)
[imageIDs,scores,imageWords]
= retrieveImages(queryImage,imageIndex)
[imageIDs,___] =
retrieveImages(queryImage,imageIndex,Name,Value)
возвращает индексы, соответствующие изображениям в 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.69 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.11 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 = 13×1
1
11
6
12
2
3
13
8
14
5
⋮
Отобразите лучшее соответствие.
bestMatch = imageIDs(1); figure imshow(imageIndex.ImageLocation{bestMatch})
estimateGeometricTransform
Используйте местоположения визуальных слов, чтобы проверить лучший результат поиска. Чтобы повторно оценить результаты поиска на основе геометрических данных, повторите эту процедуру для верхней части 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.65 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')
Удалите плохие визуальные присвоения слова с помощью функции estimateGeometricTransform
. Сохраните присвоения, которые соответствуют допустимому геометрическому преобразованию.
[tform,inlierPoints1,inlierPoints2] = ... estimateGeometricTransform(points1,points2,'affine',... 'MaxNumTrials',2000);
Повторно оцените результаты поиска процентом 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] 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
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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] Сивич, J. и А. Зиссермен. Видео Google: текстовое извлечение приближается, чтобы возразить соответствию в видео. ICCV (2003) пг 1470-1477.
[2] Philbin, J. O. Приятель, М. Исард, Й. Сивич и А. Зиссермен. Объектное извлечение с большими словарями и быстро пространственное соответствие. CVPR (2007).
bagOfFeatures
| evaluateImageRetrieval
| imageDatastore
| imageSet
| invertedImageIndex
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.