使用Tensorflow2.0执行视觉显著性检测(Visual Saliency Detection)

news/2024/9/22 3:50:40

使用Tensorflow2.0执行视觉显著性检测(Visual Saliency Detection)

上一篇博客介绍了如何使用Python,OpenCV执行视觉显著性检测(Visual Saliency Detection)。这篇博客将介绍如何使用Tensorflow2.0执行显著性检测,这是一个应用图像处理和计算机视觉算法来自动定位图像中最“显著”区域的过程。

通常显著性检测器分为三类算法:

  • 静态显著性
  • 运动显著性
  • 对象显著性
    OpenCV为提供了四种带有Python绑定的显著性检测器实现,包括:
  • cv2.saliency.ObjectnessBING_create()
  • cv2.saliency.StaticSaliencySpectralResidual_create()
  • cv2.saliency.StaticSaliencyFineGrained_create()
  • cv2.saliency.MotionSaliencyBinWangApr2014_create()

1. 效果图

原始图1:
在这里插入图片描述

显著性map图 VS 归一化图 VS 叠加图效果图1如下:
在这里插入图片描述
原始图2如下:
在这里插入图片描述

显著性map图 VS 归一化图 VS 叠加图效果图2如下:
在这里插入图片描述

2. 源代码

# 使用tensorflow2.0计算显著性图,bi# 导入必要的包
import matplotlib.pyplot as plt
import tensorflow as tfdef input_img(path):image = tf.image.decode_png(tf.io.read_file(path))image = tf.expand_dims(image, axis=0)image = tf.cast(image, tf.float32)image = tf.image.resize(image, [224, 224])return imagedef normalize_image(img):grads_norm = img[:, :, 0] + img[:, :, 1] + img[:, :, 2]grads_norm = (grads_norm - tf.reduce_min(grads_norm)) / (tf.reduce_max(grads_norm) - tf.reduce_min(grads_norm))return grads_normdef get_image():import urllib.requestfilename = 'image.jpg'img_url = r"https://upload.wikimedia.org/wikipedia/commons/d/d7/White_stork_%28Ciconia_ciconia%29_on_nest.jpg"urllib.request.urlretrieve(img_url, filename)def plot_maps(img1, img2, vmin=0.3, vmax=0.7, mix_val=2):f = plt.figure(figsize=(15, 45))plt.subplot(1, 3, 1)plt.imshow(img1, vmin=vmin, vmax=vmax, cmap="ocean")plt.title('Saliency_map')plt.axis("off")plt.subplot(1, 3, 2)plt.imshow(img2, cmap="ocean")plt.title('normalize_image')plt.axis("off")plt.subplot(1, 3, 3)plt.imshow(img1 * mix_val + img2 / mix_val, cmap="ocean")plt.axis("off")plt.title('overlayed_image')plt.show()test_model = tf.keras.applications.resnet50.ResNet50()
# 打印模型
test_model.summary()get_image()
# img_path = "image.jpg"
img_path = 'images/ym.jpg'
input_img = input_img(img_path)
input_img = tf.keras.applications.densenet.preprocess_input(input_img)
plt.imshow(input_img[0], cmap="ocean")
plt.show()
plt.imshow(normalize_image(input_img[0]), cmap="ocean")
plt.show()result = test_model(input_img)
max_idx = tf.argmax(result, axis=1)
tf.keras.applications.imagenet_utils.decode_predictions(result.numpy())# TensorFlow 2.x 上提供了 GradientTape 函数,该函数能够处理反向传播相关操作。在这里将利用 GradientTape 的优势来计算给定图像的显着性图。
with tf.GradientTape() as tape:tape.watch(input_img)result = test_model(input_img)max_score = result[0, max_idx[0]]
grads = tape.gradient(max_score, input_img)
plot_maps(normalize_image(grads[0]), normalize_image(input_img[0]))

参考

  • https://github.com/Rabusi/Saliency_Map_in_DL
  • 使用Python,OpenCV执行视觉显著性检测(Visual Saliency Detection)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17558.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

epub 电子书软件代码销售

epub 电子书软件代码销售本套代码用来读取epub 格式电子书。主要面向:有一定开发能力的人员,和有一定制作水平的朋友们。用途:自己开发学习,钻研,出appstore 应用,卖钱,加广告赚钱等。&#xff…

程序媛过中秋的正确打开方式——使用Python绘制月饼消消乐,素描图,词云图,字符画图及提取轮廓

程序媛过中秋的正确打开方式——使用Python绘制月饼消消乐,素描图,词云图,字符画图及提取轮廓 这篇博客将介绍如何使用Python绘制月饼消消乐,素描图,词云图,字符画图及提取轮廓。 使用Python绘制端午drag…

moviepy第一天|模糊视频中卓别林的头,并添加一个文本生成的结尾clip,同时保留音频

MoviePy(完整文档)是一个用于视频编辑的Python库:剪切,串联,标题插入,视频合成(又名非线性编辑),视频处理和创建自定义效果。有关一些使用示例,请参阅库。 MoviePy可以读取和写入所有最常见的音频和视频格式,包括GIF,并在Windows / Mac / Linux上运行,使用Python …

moviepy第2天|对视频添加圆圈渐变大小的结尾及文字

MoviePy(完整文档)是一个用于视频编辑的Python库:剪切,串联,标题插入,视频合成(又名非线性编辑),视频处理和创建自定义效果。有关一些使用示例,请参阅库。 MoviePy可以读取和写入所有最常见的音频和视频格式,包括GIF,并在Windows / Mac / Linux上运行,使用Python …

Java POST请求MutliPartFile上传时最大文件限制报错及解决

Java POST请求既有文件(图片,excel,可以为多个),又有表单项,可以通过form-data方式提交; apifox提交请求 后台Controller接收: 报错详情如下: 主要原因是:M…

经典算法研究系列:二、Dijkstra 算法初探

经典算法研究系列:二、Dijkstra 算法初探 July 二零一一年一月 本文主要参考:算法导论 第二版、维基百科。 写的不好之处,还望见谅。本经典算法研究系列文章,永久勘误,永久更新、永久维护。 July、二零一一年二月…

Java Excel导出复杂excel表格样式之ExcelUtil工具类

Java Excel导出包括普通导出及复杂表格样式,主要是对于需要进行行列合并的列进行特殊处理,计算清楚起始行,结束行,起始列,结束列。 普通导出可以是所有列,也可以是包含某些列,或者排除某些列&am…

CSS截取字符串,兼容浏览器

今天在经典论坛看到有同学问到CSS截取字符多余省略号代替的求助且要兼容FF... 这个的确是个比较头痛的问题,现在我在的公司都是程序截取显示省略符的。兼容是没问题,但在中文和数学或字母混排时,就会有点小小的视觉缺陷。在程序截取中&#x…