使用Tensorflow来对图片相似度进行比较时,发现在进行相同的一张图片之间的比较时,是可以比较得出结果的。即MSE=0,ssim=1。说明这两张图片是相同的。其中主要MSE和SSIM公式分别通过下面的公式获得。

均分误差:

结构相似性:

但是在进行两个不同图片之间的比较时就会出现下面的报错:ValueError: operands could not be broadcast together with shapes (182,176) (185,173)。想了半天才明白应该是两个图片的长宽不一样,那么处理起来就会报错啊。然后我就进行了图片的裁剪处理,其主要代码如下:

def crop_or_pad(filePath):filename = [filePath]filename_queue = tf.train.string_input_producer(filename)reader = tf.WholeFileReader()key, value = reader.read(filename_queue)images = tf.image.decode_jpeg(value)  # tf.image.decode_png(value)CP_H = 180CP_W = 270# 裁切图片with tf.Session() as sess:coord = tf.train.Coordinator()threads = tf.train.start_queue_runners(coord=coord)reshapeimg = tf.image.resize_image_with_crop_or_pad(images, CP_H, CP_W)# reimg1的类型是<class 'numpy.ndarray'>reimg1 = reshapeimg.eval()scipy.misc.imsave('/root/PycharmProjects/ImageIdentification/Image/crop_or_pad1.jpg', reimg1)coord.request_stop()coord.join(threads)print('crop_or_pad successful!')

先对图片进行相应的裁剪,然后再把处理好的图片保存起来,然后在进行图片的加载和相似度比较就可以了。

# -*- coding: UTF-8 -*-
from skimage.measure import structural_similarity as ssim
import matplotlib.pyplot as plt
import numpy as np
import cv2
import tensorflow as tf
import scipy.miscdef mse(imageA, imageB):err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)err /= float(imageA.shape[0] * imageA.shape[1])return errdef crop_or_pad(filePath):filename = [filePath]filename_queue = tf.train.string_input_producer(filename)reader = tf.WholeFileReader()key, value = reader.read(filename_queue)images = tf.image.decode_jpeg(value)  # tf.image.decode_png(value)CP_H = 180CP_W = 270# 裁切图片with tf.Session() as sess:coord = tf.train.Coordinator()threads = tf.train.start_queue_runners(coord=coord)reshapeimg = tf.image.resize_image_with_crop_or_pad(images, CP_H, CP_W)# reimg1的类型是<class 'numpy.ndarray'>reimg1 = reshapeimg.eval()scipy.misc.imsave('/root/PycharmProjects/ImageIdentification/Image/crop_or_pad1.jpg', reimg1)coord.request_stop()coord.join(threads)print('crop_or_pad successful!')def compare_images(imageA, imageB, title):m = mse(imageA, imageB)s = ssim(imageA, imageB)# setup the figurefig = plt.figure(title)  # 创建一个窗口plt.suptitle("MSE: %.2f, SSIM: %.2f" % (m, s))# show first imageax = fig.add_subplot(1, 2, 1) # 将窗口划分为1行两列的子图当前为第1个子图plt.imshow(imageA, cmap=plt.cm.gray) # 图片的绘制,plt.cm.gray显示为灰度图plt.axis("off") # 不显示坐标尺寸# show the second imageax = fig.add_subplot(1, 2, 2) # 将窗口划分为1行两列的子图当前为第2个子图plt.imshow(imageB, cmap=plt.cm.gray)plt.axis("off")# show the imagesplt.show() # 显示窗口
if __name__ == '__main__':#图片格式转化,转化成长和宽一致的图片crop_or_pad('/root/PycharmProjects/ImageIdentification/Image/image2.jpg')# 图片加载original = cv2.imread("/root/PycharmProjects/ImageIdentification/Image/crop_or_pad.jpg")contrast = cv2.imread("/root/PycharmProjects/ImageIdentification/Image/crop_or_pad1.jpg")shopped = cv2.imread("/root/PycharmProjects/ImageIdentification/Image/crop_or_pad.jpg")# 图片的灰阶转化# convert the images to grayscaleoriginal = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)contrast = cv2.cvtColor(contrast, cv2.COLOR_BGR2GRAY)shopped = cv2.cvtColor(shopped, cv2.COLOR_BGR2GRAY)# 彩色图片的灰阶转化:对于彩色图片也可以通过灰阶实现# Gray = R * 0.299 + G * 0.587 + B * 0.114fig = plt.figure("Images")images = ("Original", original), ("Contrast", contrast), ("Photoshopped", shopped)# loop over the imagesfor (i, (name, image)) in enumerate(images):# show the imageax = fig.add_subplot(1, 3, i + 1)ax.set_title(name)plt.imshow(image, cmap=plt.cm.gray)plt.axis("off")# show the figureplt.show()# compare the imagescompare_images(original, original, "Original vs. Original")compare_images(original, contrast, "Original vs. Contrast")compare_images(original, shopped, "Original vs. Photoshopped")

图片比较结果:

通过图片自身比较可知,MSE为0,表示相似度完全相同。

两个不同图片之间的比较,可以看出MSE很大,说明相似度很小。

Tensorflow第四课,图片相似度比较前的图片裁剪相关推荐

  1. jsp图片上传提交前,图片显示在页面上

    <divclass="upload_box"> <b>上传图片</b> <inputtype="file"name=& ...

  2. 【python 图片相似度】直方图计算图片相似度

    直方图能够描述一幅图像中颜色的全局分布,而且容易理解和实现,所以入门级的图像相似度计算都是使用它的. 直方图算法是对源图像与要筛选的图像进行直方图数据采集,对采集的各自图像直方图进行归一化再使用巴氏系 ...

  3. 图片相似度识别算法,百度图片识别算法

    图像识别算法都有哪些 图像识别算法:1人脸识别类(Eigenface,Fisherface算法特别多),人脸检测类(j-v算法,mtcnn)2车牌识别类,车型识别类(cnn)3字符识别(cnn)... ...

  4. android 图片相似度比对,Android图片对比(图片相似度)代码

    声明 这俩天在做图片对比的工具,这里将对比的核心功能代码贴上来共同学习,有什么缺点和不足请大家指出,谢谢.Lee出品,转载请注明出处:http://blog.csdn.net/hnulwt/artic ...

  5. 图片相似度计算:深入理解DCT变换以及感知哈希

    缘起 Android上硬件编解码一直是个老大难问题,就解码来说,硬解码本身并不困难,只要按照MediaCodec的流程开发即可.但由于系统碎片化,硬件规格不一致,硬件解码会到黑屏,花屏,绿屏之类的显示 ...

  6. 【python 以图搜图】三种图片相似度计算融合算法

    目标:在一个文件夹找出相似度较高的图片,达到以图搜图的目的. 我找了十组,都是高度相似的图片. 核心算法: 1.分别自定义三种计算图片相似度算法,计算图片相似度算法ORB算法,以及局部敏感哈希phas ...

  7. 一种基于颜色统计和特征指纹的图片相似度计算方法

    一种基于颜色统计和特征指纹的图片相似度计算方法 1.摘要 图片相似度有很多实际应用,比如谷歌搜图.淘宝识物购买,现在很多类似应用已经使用神经网络训练实现,但是本文仅仅从图像处理角度出发,根据图像内容特 ...

  8. 广告行业中那些趣事系列39:实战广告场景中的图片相似度识别任务

    导读:本文是"数据拾光者"专栏的第三十九篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇从理论到实践介绍了广告场景中的图片相似度识别任务,对于希望解决图片相似度识 ...

  9. 独家 | 利用孪生网络,Keras,Tensorflow比较图片相似度

    作者:Adrian Rosebrock 翻译:张一然 校对:wwl 本文约3700字,建议阅读8分钟. 在本文中,您将学习如何使用孪生网络和深度学习库Keras / TensorFlow比较两个图像的 ...

最新文章

  1. python内置函数用来返回数值型序列中所有元素之和_Python内置函数______用来返回数值型序列中所有元素之和...
  2. 成功解决TypeError: sequence item 0: expected str instance, bytes found
  3. 云计算开发教程:Python自动化运维开发实战流程控制
  4. Linux命令之telnet 命令
  5. .NET三种异步模式(APM、EAP、TAP)
  6. 推荐12个绚丽的CSS3图片悬停效果
  7. 英语笔记:词组句子:1112
  8. WebStorm 打开Node.js的代码提示功能
  9. Spark算子:统计RDD分区中的元素及数量
  10. 【Oracle】truncate分区表
  11. php 开启memcache,php开启与安装 memcache
  12. 通过命令行运行java出现错误: 找不到或无法加载主类 解决办法
  13. bootstrap modal弹出框实现及实现按钮点击复制功能
  14. 【优化求解】基于matlab遗传算法求解多城市多应急物流中心选址问题【含Matlab源码 1724期】
  15. Java之HTTP长连接
  16. Latex语法学习05:代码表格的制作
  17. 蓝牙调试器-划时代无线调试器
  18. hau 1825 第一道拓扑排序题
  19. java comp env_Java:comp/env/讲解与JNDI(转)
  20. python如何设置窗口为活动窗口

热门文章

  1. js延时刷新本页面代码
  2. java建行转账接口开发_建行网银接口开发注意事项
  3. 日本免费空间Atpages.jp老牌稳定支持PHP,CGI和2style.net多域名空间
  4. oracle之case函数(case when then else end)用法
  5. Linux如何限制用户的内存使用量
  6. 安装linux版的skype
  7. 细胞生命游戏一维c语言,生命游戏 细胞死亡问题
  8. window通过本地配置实现ip访问重定向虚拟机对外公开访问
  9. 详解三大抽样分布:t分布、卡方分布、F分布
  10. 电脑照片删除了怎么恢复回来