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

3 ビュー (過去 30 日間)
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.

採用された回答

David Sidhu
David Sidhu 2017 年 4 月 5 日
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)

その他の回答 (1 件)

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

製品

Community Treasure Hunt

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

Start Hunting!

Translated by