下面的代码计算hsv颜色空间中两个图像之间的欧几里德距离,如果结果低于阈值(此处设置为0.5),则两个图像相似,并将它们组合在一个簇中。
这将针对一组图像(实际上是视频帧)完成。
它在一组样本图像上运行良好但是当我更改样本时它开始工作奇数,例如两个不同图像的结果较低而两个相似图像的结果较高(如1.2)。
例如,这两个非常相似的图片的结果相对较高: first pic和second pic当它实际应该低于0.5时。
有什么问题?
在下面的代码中,f
除以100
,以便与0.5
附近的值进行比较。
Im1 = imread('1.jpeg');
Im2 = imread('2.jpeg');
hsv = rgb2hsv(Im1);
hn1 = hsv(:,:,1);
hn1=hist(hn1,16);
hn1=norm(hn1);
hsv = rgb2hsv(Im2);
hn2 = hsv(:,:,1);
hn2=hist(hn2,16);
hn2=norm(hn2);
f = norm(hn1-hn2,1)
f=f/100
答案 0 :(得分:0)
这两行:
hn1=hist(hn1,16);
hn1=norm(hn1);
将2D图像转换为标量。我怀疑那不是你感兴趣的事情......
编辑:
可能更好的方法是:
hn1 = hist(hn1(:),16) / numel(hn1(:));
但是,你还没有真正给我们太多的数学,所以这只是猜测。