What is the problem with my function to compute the cosine similarity of two images?

3 visualizaciones (últimos 30 días)
I am using a script to compute the cosine similarity of two images.
I first convert the images to vectors:
Img1 = imread('test1.jpg')
Img2 = imread('test2.jpg')
ImgVector1 = Img1(:)
ImgVector2 = Img2(:)
I then use the script to compute the cosine similarity between the vectors:
cossimnew(ImgVector1,ImgVector2)
That function is as follows:
function s=cossimnew(actual,estimate)
[m,n]=size(actual);
if n==1
s=((estimate'*actual)/(norm(estimate)*norm(actual)))';
else
for i=1:n,
x=norm(estimate(:,i))*norm(actual(:,i));
if x ~= 0
s(i)=(estimate(:,i)'*actual(:,i))/x;
else
s(i)=NaN;
end
end
end
s=s';
However I have been getting the following error:
Error using *
MTIMES is not fully supported for integer classes. At least one input must be
scalar.
To compute elementwise TIMES, use TIMES (.*) instead.
Error in cossimnew (line 8)
Can anyone point me in the right direction?
Thanks so much.

Respuesta aceptada

David Sidhu
David Sidhu el 5 de Abr. de 2017
I had to convert the vector to floating point numbers.
Doing the following led to the function working (added the double function):
I1 = imread('test1.jpg');
I2 = imread('test2.jpg');
IV1 = double(I1(:));
IV2 = double(I2(:));
cossimnew(IV1,IV2)

Más respuestas (1)

Spencer Chen
Spencer Chen el 4 de Abr. de 2017
Please read Matlab documentation on the differences between the "*" and ".*" notations. Also please read more about vector operations and vectorizing operations in Matlab.

Etiquetas

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by