Как проверить, похожи ли 2 изображения относительно эталонного объекта?

В моем приложении я хочу проверить, имеет ли сделанное изображение тот же эталонный объект, что и предыдущее изображение. Например, Я делаю снимок, на котором есть столб рядом с открытой площадкой, и говорю, что через несколько месяцев я фотографирую стоящее в том же положении, и теперь я получаю изображение столба и какого-то здания, которое приближается. Я хочу проверить, похожи ли изображения в этом отношении.

Зачем нужно проверять, есть ли у него такой же объект? У вас уже должна быть ссылка на объект, который не должен меняться

Sagar 05.06.2018 08:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
168
2

Ответы 2

Мы не можем проверить объект, но другой способ заключается в том, что мы можем сохранить наше изображение в доступном для рисования, а затем мы можем проверить байты изображения, если байты совпадают, тогда изображение такое же

Попытка сравнить с байтами или пикселями - единственный способ, который обычно работает.

drawable1.bytesEqualTo(drawable2) 
drawable1.pixelsEqualTo(drawable2) 
bitmap1.bytesEqualTo(bitmap1) 
bitmap1.pixelsEqualTo(bitmap2) 

Вариант А: вычислить упрощенную гистограмму (8 бит). Сортируйте изображения по сходству гистограмм.

Я использовал это в классе обработки изображений. Это довольно щадящий способ сравнения изображений. Небольшие изменения в освещении или ориентации не нарушат сравнение. Вы даже можете перевернуть изображение на 90 ° или 180 °.

У меня все еще есть код, даже если это был Matlab, он может быть полезен:

// image to compare:
QueryPicture = imread(strcat('E:\Users\user98\Images\',num2str(floor(result/10)),num2str(mod(result,10)),'.jpg'));

sums = zeros(50,2);

 h = zeros(64,50);

 // do a simpified histogram:
 for n=1:50
    img=double(imread(strcat('E:\Users\user98\Images\',num2str(floor(n/10)),num2str(mod(n,10)),'.jpg')));
    for i=1:200
         for j=1:200         
             x1 = bitshift(img(i,j,1), -6);
             x2 = bitshift(img(i,j,2), -6) * 4;
             x3 = bitshift(img(i,j,3), -6) * 16;
             x = x1 + x2 + x3;
             h(x+1, n) = (h(x+1, n) + 1);
         end
    end
 end

// compare histograms:
for n=1:50
    tmpVec = zeros(64,1);
    for i=1:64
        tmpVec(i) = abs(h(i,n) - h(i,result));
    end

    for j=1:64 
       sums(n,1) = sums(n,1)+tmpVec(j);
    end
    sums(n,2) = n;
end
sortedImages = sortrows(sums,1)



// Show compare-image:
subplot(2,3,1); image(uint8(QueryPicture));
// show 3 best matches for compare-image:
sortedImages(1);
sortedImages(2);
sortedImages(3);
img1=double(imread(strcat('E:\Users\user98\Images\',num2str(floor(sortedImages(2,2)/10)),num2str(mod(sortedImages(2,2),10)),'.jpg')));
img2=double(imread(strcat('E:\Users\user98\Images\',num2str(floor(sortedImages(3,2)/10)),num2str(mod(sortedImages(3,2),10)),'.jpg')));
img3=double(imread(strcat('E:\Users\user98\Images\',num2str(floor(sortedImages(4,2)/10)),num2str(mod(sortedImages(4,2),10)),'.jpg')));

subplot(2,3,4); image(uint8(img1));
subplot(2,3,5); image(uint8(img2));
subplot(2,3,6); image(uint8(img3));

Вариант Б::

Используйте данные GPS с изображения (exif), если они доступны.

Вариант C::

Google Lens - это приложение, которое может классифицировать изображения и обнаруживать объекты.

Другие вопросы по теме