当前位置: 首页 > news >正文

03 卷积操作图片

一、均值滤波

# 卷积操作
# 输入图片. input, 必须是4维tensor(图片数量, 图片高度, 图片的宽度, 图片的通道数)
# filters, 卷积核, 必须是4维的tensor(卷积核的高度和宽度, 输入图片的通道数, 卷积核的个数)
# strides, 步长, 卷积核在图片的各个维度上的移动步长, (1, 1, 1, 1)
# padding, 0填充, 'Valid'和'Same', valid表示不进行填充, same表示输入图片和输出图片大小保持一致.
# 输入数据的格式: data_format 'NHWC'
# tf.nn.conv2d()

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tfmoon = plt.imread('/newdisk/darren_pty/CNN/moonlanding.png')
print(moon.shape)plt.figure(figsize=(10, 8))
plt.imshow(moon, cmap='gray')plt.show()

plt.imshow是用来显示图像的函数,它可以将数组或矩阵转化为图像并显示。

plt.show是用来显示图像的函数,它会打开一个窗口来显示当前的图像,只有调用了这个函数,图像才会真正显示出来。

简单来说,plt.imshow是将数据变成图像,plt.show是将图像显示出来

plt.figure("Image")  创建图像窗口

均值滤波:

np.array([[1/9, 1/9, 1/9], [1/9, 1/9, 1/9], [1/9, 1/9, 1/9]]) //3x3 的矩阵

使用这样的矩阵来执行平滑操作,通过将每个像素的值替换为其周围像素值的平均值来减小图像中的噪声或细节。这个操作称为均值滤波。

np.array([[1/9, 1/9, 1/9], [1/9, 1/9, 1/9], [1/9, 1/9, 1/9]]).reshape(3, 3, 1, 1)

将这个矩阵重新塑造成一个 4 维数组,形状为 (3, 3, 1, 1)

# 均值滤波
input_img = tf.constant(moon.reshape(1, 474, 630, 1), dtype=tf.float32)
filters = tf.constant(np.array([[1/9, 1/9, 1/9], [1/9, 1/9, 1/9], [1/9, 1/9, 1/9]]).reshape(3, 3, 1, 1), dtype=tf.float32)
strides = [1, 1, 1, 1]
conv2d = tf.nn.conv2d(input=input_img, filters=filters, strides=strides, padding='SAME')
plt.figure(figsize=(10, 8))# 4维图片转为2维图像
plt.imshow(conv2d.numpy().reshape(474, 630), cmap='gray') 

 

`tf.constant` 是 TensorFlow 中的一个函数,用于创建一个常量张量(tensor)。在 TensorFlow 中,张量是多维数组,可以包含标量、向量、矩阵等。

`tf.constant` 的基本语法如下:

tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False)

参数说明:

- `value`:要创建的常量张量的值。可以是 Python 中的标量、列表、NumPy 数组或其他 TensorFlow 张量。
- `dtype`:可选参数,指定常量的数据类型。例如,`tf.float32` 表示浮点数类型,默认为 `tf.float32`。
- `shape`:可选参数,指定常量张量的形状。如果未指定,则根据 `value` 的形状自动确定。
- `name`:可选参数,为常量张量指定名称。
- `verify_shape`:可选参数,如果为 True,则会检查 `value` 是否具有与指定 `shape` 匹配的形状。默认为 False。

以下是一些示例:

import tensorflow as tf# 创建一个标量常量
scalar_constant = tf.constant(5)# 创建一个形状为 (2, 3) 的常量张量
matrix_constant = tf.constant([[1, 2, 3], [4, 5, 6]])# 创建一个形状为 (3, 2) 的常量张量,并指定数据类型为 float32
float_matrix_constant = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]], dtype=tf.float32)

`tf.constant` 用于创建不可变的张量,即创建后无法更改其值。如果你需要可变的张量,可以使用其他 TensorFlow 操作来实现,例如 `tf.Variable`。

二、高斯滤波

高斯滤波的卷积核具有以下特点:

1. **中心点权重最高**:高斯滤波核的中心点权重最高,而周围的权重逐渐减小。这是因为高斯分布在中心点处具有峰值,而在距离中心点越远的位置权重逐渐减小。

2. **对称性**:高斯滤波核通常是对称的,即以中心点为对称轴,左右或上下的权重是相等的。这确保了平滑操作是均匀的,不引入图像的偏移或拉伸。

3. **权重和为1**:高斯滤波核的所有权重之和始终为1。这确保了在滤波过程中图像的亮度不会发生明显的变化,因为它们都是加权平均值。

4. **标准差控制平滑程度**:高斯滤波核的平滑程度由标准差(σ,sigma)参数控制。较小的标准差会产生较低的平滑效果,而较大的标准差会产生更高的平滑效果。标准差越大,权重分布越广,导致更大程度的平滑。

5. **核的大小**:高斯滤波核的大小通常是一个奇数,例如3x3、5x5等。核的大小决定了平滑的程度,较大的核可以产生更强烈的平滑效果。

高斯滤波核的形状和权重分布使其能够有效地去除图像中的高频噪声,平滑图像,并保持图像的整体结构。这使得它成为图像处理和计算机视觉中常用的滤波方法之一,特别是在前处理步骤中用于减少噪声以提高后续处理步骤的性能。

# 高斯滤波
input_img = tf.constant(moon.reshape(1, 474, 630, 1), dtype=tf.float32)
filters = tf.constant(np.array([[1/9, 2/9, 1/9], [2/9, 3/9, 2/9], [1/9, 2/9, 1/9]]).reshape(3, 3, 1, 1), dtype=tf.float32)
strides = [1, 1, 1, 1]
conv2d = tf.nn.conv2d(input=input_img, filters=filters, strides=strides, padding='SAME')
plt.figure(figsize=(10, 8))
plt.imshow(conv2d.numpy().reshape(474, 630), cmap='gray')

三、边缘检测

np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])   用于进行图像边缘检测

这个特定的卷积核可以用于检测图像中的边缘特征。它的作用如下:

  • 中心像素(-4)具有最高的负权重,表示它对于周围像素的差异非常敏感
  • 上、下、左、右的相邻像素(1)具有正权重,表示它们对于中心像素的影响。
  • 四个对角线的相邻像素(0)没有影响。
  • 通过在图像上滑动这个卷积核并执行卷积操作,可以突出图像中的边缘特征,因为边缘通常是像素值的剧烈变化。这种卷积核也可以用于图像锐化,以增强图像中的边缘特征。
cat = plt.imread('cat.jpg')
plt.figure(figsize=(10, 8))
plt.imshow(cat)

# 把猫变成黑白图片. 
cat = cat.mean(axis=2)
plt.figure(figsize=(10, 8))#不加gray,图像将会被上色
plt.imshow(cat, cmap='gray')

 `cat.mean(axis=2)` 是一个NumPy数组操作,用于计算沿指定轴(axis)的平均值。让我们解释一下这个操作的含义:

假设 `cat` 是一个NumPy数组,它的形状为 `(height, width, channels)`,其中:
- `height` 表示图像的高度(垂直像素数)。
- `width` 表示图像的宽度(水平像素数)。
- `channels` 表示图像的通道数,通常是3(表示红、绿、蓝通道)。

`axis=2` 意味着你正在沿着第三个维度(即通道维度)计算平均值。在这个上下文中,`cat.mean(axis=2)` 将返回一个新的NumPy数组,该数组的形状为 `(height, width)`,其中每个元素代表了在相应位置的像素通道的平均值

这个操作通常用于将彩色图像转换为灰度图像,因为它会将每个像素点的颜色通道平均值作为该像素点的灰度值,从而将彩色图像转换为灰度图像。

#不加gray,图像将会被上色

# 边缘检测
input_img = tf.constant(cat.reshape(1, 456, 730, 1), dtype=tf.float32)
filters = tf.constant(np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]]).reshape(3, 3, 1, 1), dtype=tf.float32)
strides = [1, 1, 1, 1]
conv2d = tf.nn.conv2d(input=input_img, filters=filters, strides=strides, padding='SAME')
plt.figure(figsize=(10, 8))
plt.imshow(conv2d.numpy().reshape(456, 730), cmap='gray')
plt.show()

通常,神经网络中,卷积核数值是用 反向传播 计算得到

四、锐化

# 锐化
input_img = tf.constant(cat.reshape(1, 456, 730, 1), dtype=tf.float32)
filters = tf.constant(np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]]).reshape(3, 3, 1, 1), dtype=tf.float32)
strides = [1, 1, 1, 1]
conv2d = tf.nn.conv2d(input=input_img, filters=filters, strides=strides, padding='SAME')
plt.figure(figsize=(10, 8))
plt.imshow(conv2d.numpy().reshape(456, 730), cmap='gray')

五、对彩色图片的卷积

彩色图片有三个通道,把每个通道作为一张图

euro.reshape(1, 582, 1024, 3).transpose([3, 1, 2, 0]) //不改变图片的情况下,修改维度

euro = plt.imread('./欧式.jpg')
plt.figure(figsize=(10, 8))
plt.imshow(euro)
print(euro.shape) #形状

# 对彩色图片进行卷积操作.
# 把彩色图片的每个通道当成一张图
input_img = tf.constant(euro.reshape(1, 582, 1024, 3).transpose([3, 1, 2, 0])), dtype=tf.float32)
filters = tf.constant(np.array([[1/9, 1/9, 1/9], [1/9, 1/9, 1/9], [1/9, 1/9, 1/9]]).reshape(3, 3, 1, 1), dtype=tf.float32)
strides = [1, 1, 1, 1]
conv2d = tf.nn.conv2d(input=input_img, filters=filters, strides=strides, padding='SAME')
plt.figure(figsize=(10, 8))
plt.imshow(conv2d.numpy().reshape(3, 582, 1024).transpose([1, 2, 0]) / 255.0)

相关文章:

03 卷积操作图片

一、均值滤波 # 卷积操作 # 输入图片. input, 必须是4维tensor(图片数量, 图片高度, 图片的宽度, 图片的通道数) # filters, 卷积核, 必须是4维的tensor(卷积核的高度和宽度, 输入图片的通道数, 卷积核的个数) # strides, 步长, 卷积核在图片的各个维度上的移动步长, (1, 1, 1,…...

软考:中级软件设计师:程序语言基础:表达式,标准分类,法律法规,程序语言特点,函数传值传址

软考:中级软件设计师:程序语言基础:表达式 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都…...

Java“牵手”1688商品详情数据,1688商品详情API接口,1688API接口申请指南

1688平台商品详情接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口,通过…...

stable diffusion实践操作-批次出图

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、批次出图介绍1.1 webUI设置1.2 参数介绍 二、批次出图使用2.1 如何设置2.1 效果展示 总结 前言 本章主要介绍SD批次出图。 想要一次产生多张图片的时候使用。 一、批次出图介绍 1.1 webUI设置 1.2 参数…...

LeetCode热题100 【cpp】题解(一)哈希表和双指针

文章目录 1. 两数之和49. 字母异位词分组128. 最长连续序列283. 移动零11. 盛最多水的容器15. 三数之和42. 接雨水 题单链接: LeetCode 热题 100 1. 两数之和 leetcode题目链接 题解1:暴力枚举 时间复杂度: O ( n 2 ) O(n^2) O(n2) class …...

Python爬虫常见代理池实现和优化

在这篇文章中,我们将探讨Python爬虫中常见的代理池实现和优化方法。在爬取网站数据时,为防止被目标网站封禁IP,我们通常会使用代理IP进行访问。一个高效且稳定的代理池可以帮助我们轻松应对各种反爬策略。   首先,我们来了解一下…...

前端面试的话术集锦第 3 篇:进阶篇上

这是记录前端面试的话术集锦第三篇博文——进阶篇上,我会不断更新前端面试话术的博文。❗❗❗ 1 谈谈变量提升 当执⾏JS代码时,会⽣成执⾏环境,只要代码不是写在函数中的,就是在全局执⾏环境中,函数中的代码会产⽣函数执⾏环境,只此两种执⾏环境。 b() // call b conso…...

【文字到语音的论文总结】

1.文字到语音的整个过程 文字到语音的一般整体结构 主要是下面这个流程,每个网络可能会把其中两者或是三者融合在一起来; 长度不同的问题 生成的语音可能和文字的长度并不一样,因此需要解决这个问题 Tactron使用的是交叉注意力的方式解…...

E. Data Structures Fan(思维 + 异或前缀和)

Problem - E - Codeforces 给你一个整数数组 a1, a2,..., an,以及一个由 n 个字符组成的二进制字符串† s。 Augustin 是一个数据结构的爱好者。因此,他请你实现一个可以回答 q 个查询的数据结构。这里有两种类型的查询: Plain Text "1…...

初学python爬虫学习笔记——爬取网页中小说标题

初学python爬虫学习笔记——爬取网页中小说标题 一、要爬取的网站小说如下图 二、打开网页的“检查”,查看html页面 发现每个标题是列表下的一个个超链接,从183.html到869.html 可以使用for循环依次得到: x range(183,600) for i in x:pr…...

The WebSocket session [x] has been closed and no method (apart from close())

在向客户端发送消息时,session关闭了。 不管是单客户端发送消息还是多客户端发送消息,在发送消息之前判断session 是否关闭 使用 isOpen() 方法...

前端实现展开收起的效果 (react)

需求背景:需要实现文本的展开收起效果,文本是一行一行的,数据格式是数组结构。 如图所示(图片已脱敏) 简单实现:使用一个变量控制展开收起效果。 展开收起逻辑部分(react) const […...

ABY2.0:更低的通信开销

参考文献: [ABY] Demmler D, Schneider T, Zohner M. ABY-A framework for efficient mixed-protocol secure two-party computation[C]//NDSS. 2015.[ABY3] Mohassel P, Rindal P. ABY3: A mixed protocol framework for machine learning[C]//Proceedings of the…...

vue项目预览图片

1.图片为本地上传的预览&#xff1a; <input type"file" ref"file"/> <img :src"imgUrl"/>let fr new FileReader()fr.readAsArrayBuffer(this.$refs.file.files[0])fr.addEventListener("loadend", (e) > {let buff…...

Tomcat 安装

1.关闭防火墙 2.安装JDK包 3. 4。添加环境变量 5.刷新配置文件 6.解压文件 7.启动tomcat 8. 9.编写tomcat.service文件 vim /etc/systemd/system/tomcat.service 10.刷新服务 11.打开浏览器访问&#xff1a;192.168.2.100:8080/&#xff0c;正常可以看到以下界面...

计算机网络的故事——HTTP报文内的HTTP信息

HTTP报文内的HTTP信息 文章目录 HTTP报文内的HTTP信息一、HTTP 报文二、请求报文及响应报文的结构三、编码提升传输速率 一、HTTP 报文 HTTP报文是由多行&#xff08;CRLF作换行符&#xff09;数据构成的字符串文本&#xff0c;HTTP报文可以分为报文首部和报文主体两部分&…...

CF1120 D. Power Tree 巧妙的图论转化

传送门 [前题提要]:无 题目描述: 就是给你一棵树,然后每个点有花费,然后你可以选一个点,付费后对这个点的子树的所有叶子结点增减任意权值. 考虑有一个人会给这棵树的所有叶子结点赋值(值我们不知道),输出最小的花费,使得无论它如何赋值,我们使用上述的花 费都能使所有的叶子…...

【算法训练-字符串 三】最长公共子串、最长公共子序列

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【】&#xff0c;使用【】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&#xff1a;目标公…...

lintcode 1446 · 01矩阵走路问题 【两次BFS, VIP 中等 1也计算距离,但是不入队列】

题目链接&#xff0c;描述 https://www.lintcode.com/problem/1446 给定一个大小为 n*m 的 01 矩阵 grid &#xff0c;1 是墙&#xff0c;0 是路&#xff0c;你现在可以把 grid 中的一个 1 变成 0&#xff0c;请问从左上角走到右下角是否有路可走&#xff1f;如果有路可走&am…...

第一个实例:QT实现汽车电子仪表盘

目录 1.实现效果 1.1.视频演示 1.2.实现效果截图 2.生成的安装程序 3.功能概述 4.具体实现 5.QT扩展介绍 5.1.QT介绍 5.2.QT历史发展 5.3.QT平台支持 5.4.Qt Creator 5.5.优势 5.5.1.优良的跨平台特性 5.5.2.面向对象 5.5.3.丰富的 API 1.实现效果 1.1.视频演…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...