2024.9.13 Python与图像处理新国大EE5731课程大作业,索贝尔算子计算边缘,高斯核模糊边缘,Haar小波计算边缘

1.编写一个图像二维卷积程序。它应该能够处理任何灰度输入图像,并使用以下内核进行操作:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy import linalg
import random as rm
import math
import cv2# import and show the image
img = cv2.imread('einstein.png',cv2.IMREAD_GRAYSCALE)
plt.imshow(img,plt.cm.gray)
print(img)
img_sz=img.shape

代码逻辑:
提取灰度图,显示图片
在这里插入图片描述

def pascal(k,n):if k >= 0 and k <= n:y = math.factorial(n)/(math.factorial(n-k)*math.factorial(k))else:y=0return y

算组合种类的pascal函数,就是数学里的大C,之后用于计算索贝尔算子

2.索贝尔算子

Sobel 算子(Sobel Operator) 是一种常用的 边缘检测 算法,用于图像处理领域。它通过计算图像像素的梯度(变化率)来检测图像中的边缘。具体来说,Sobel 算子用于确定图像中灰度变化最明显的区域,这些区域通常对应于物体的边界或细节。
在二维函数中,计算梯度,可以找到变化率最大的部分来,索贝尔算子就是在图像中计算梯度最大的部分。他有两种3*3的卷积核(滤波器)
分别是:
两种3*3的卷积核

def sobel(order): sobel_x=np.zeros([order,order])smooth=np.zeros([order,1])diff=np.zeros([order,1])for j in range(0,order):smooth=pascal(j,order-1)
#         print(smooth)for k in range(0,order):diff=pascal(k,order-2)-pascal(k-1,order-2)
#             print(diff)sobel_x[j][k]=smooth*diffsobel_y=-1*sobel_x.Treturn sobel_x,sobel_y

这个代码就可以生成order*order的两种索贝尔算子,如果order是3,那么上面的索贝尔算子就是上面那个图。

# convolution for sobel kernel, 2 kernel in 2 directions
def convolution_2(img,kernel1,kernel2):sz_img=img.shapesz_kernel=kernel1.shape#[a,b]=sz_kernela=int((sz_kernel[0]-1)/2)b=int((sz_kernel[1]-1)/2)pimg=np.zeros(sz_img)for j in range(a,(sz_img[0]-a)):for k in range(b,(sz_img[1]-b)):for i in range(0,2):ximg=np.sum(img[j-a:j+a+1,k-b:k+b+1]*kernel1)yimg=np.sum(img[j-a:j+a+1,k-b:k+b+1]*kernel2)pimg[j][k]=np.abs(ximg)+np.abs(yimg)return pimg            

代码逻辑:
举个例子,现在有一个55的图片,你的卷积核是33的,那么现在你需要做的是,在55的图片中先取最左上角的33矩阵和两个卷积核相卷积,然后得出两个数字,给这两个数字都做一次绝对值然后再相加,就是这个点的近似梯度,然后55的图像考虑边缘,能做33次这样的操作,最后得到3*3的矩阵。
理论上求该点的平方和然后开方才应该是这个点的真实梯度,为什么要用绝对值和呢,因为在庞大的计算中,如果都去做平方和,那就太耗费系统资源了,所以使用绝对值和是近似的计算方法,忽略了方向性,只看水平和垂直梯度的绝对强度之和,它可以提供相对较强的边缘信息,但缺少准确性,边缘会显得比较尖锐和不平滑。

# when mask size is 3, ploting the Sobel kenerl processed image
[sobel_x,sobel_y]=sobel(3)
print(sobel_x,'\n',sobel_y)
sobel_img = convolution_2(img,sobel_x,sobel_y)
#sobel_x_img=np.uint8(sobel_x_img)
plt.imshow(sobel_img,plt.cm.gray)
# print(sobel_x_img)

计算卷积,生成边缘图像
在这里插入图片描述

3.高斯核与高斯卷积

def convolution_1(img,kernel1):sz_img = img.shape          # 获取图像的尺寸sz_kernel = kernel1.shape    # 获取卷积核的尺寸a = int((sz_kernel[0]-1)/2)  # 计算卷积核在 x 方向的半径b = int((sz_kernel[1]-1)/2)  # 计算卷积核在 y 方向的半径pimg = np.zeros(sz_img)      # 初始化输出图像的大小,和原图大小相同for j in range(a, (sz_img[0]-a)):      # 遍历图像的每一个像素for k in range(b, (sz_img[1]-b)):# 从原图像中提取出一个与高斯核大小相同的子矩阵,进行逐元素相乘并累加ximg = np.sum(img[j-a:j+a+1, k-b:k+b+1] * kernel1)pimg[j][k] = np.abs(ximg)     # 将卷积后的结果的绝对值赋值给输出图像return pimg

这个代码是卷积的定义操作,高斯核还没进去

#kernel
#gaussian
def gaussian(x,y,delta):return 1/(2*math.pi*delta**2)*np.exp(-1*(x*x+y*y)/(2*delta**2))
def Gau(order):delta=0.3*((order-1)/2-1)+0.8a=int((order-1)/2)ga=np.zeros([order,order])for j in range(-a,a+1):for k in range(-a,a+1):ga[j][k]=gaussian(j,k,delta)return ga
# ga1=1/16*np.array([[1,2,1],[2,4,2],[1,2,1]])
# ga2=1/159*np.array([[2,4,5,4,2],[4,9,12,9,4],[5,12,15,12,5],[4,9,12,9,4],[2,4,5,4,2]])

高斯核(Gaussian Kernel)是图像处理中一种常用的滤波器,用于平滑图像,消除噪声。它是根据高斯函数定义的二维矩阵。高斯核的作用是将图像中的每个像素与其邻域像素的加权平均计算,权重依据高斯分布确定,离中心越近的像素权重越大,离得越远的像素权重越小。
卷积后的图像会变得更加平滑,噪声被抑制,同时保留主要的图像特征。这个函数中使用了 绝对值,通常用于保持结果的非负性,但在一般高斯卷积中不一定需要绝对值。
代码先定义了高斯函数,然后定义了高斯核。并给出了常见的三阶高斯核和五阶高斯核
ga1 是较小的高斯核,平滑效果相对较弱,但保留了更多的图像细节。
ga2 是较大的高斯核,平滑效果较强,适合噪声较大的图像。

# when mask size is 3, ploting the Gaussian kenerl processed image
ga1=Gau(3)
print(ga1)
gaussian_img = convolution_1(img,ga1)
#sobel_x_img=np.uint8(sobel_x_img)
plt.imshow(gaussian_img,plt.cm.gray)
#print(sobel_x_img)

这个代码就是对图像进行高斯卷积操作模糊边缘,高斯卷积核为三层高斯核
在这里插入图片描述
效果如下,如果用九阶高斯核代码和输出如下:

# when mask size is 9, ploting the Gaussian kenerl processed image
ga2=Gau(9)
print(ga2)
gaussian_img = convolution_1(img,ga2)
#sobel_x_img=np.uint8(sobel_x_img)
plt.imshow(gaussian_img,plt.cm.gray)
#print(sobel_x_img)

在这里插入图片描述

4.Haar小波卷积核

Haar 小波卷积 是一种高效的边缘检测和特征提取方法。它通过简单的 1 和 -1 构造出卷积核,可以快速检测图像中的边缘和变化。
卷积操作 将 Haar 核应用于图像,生成新的特征图,用于分析图像的结构和特征。
Haar 小波广泛应用于 边缘检测、图像压缩 和 特征提取 等任务,尤其适合实时计算和高效处理场景。
在计算机视觉中,Haar 小波常用于特征提取。例如,人脸检测算法中,Haar 特征被用于快速检测图像中的人脸区域。适合实时计算和高效处理场景。
与 Sobel 核的对比
Sobel 卷积核也是用于边缘检测的,但与 Haar 核不同,Sobel 核使用的是平滑的梯度变化,而 Haar 核直接检测的是 1 和 -1 的急剧变化。与 Sobel 核相比,Haar 核的计算更加简单,但 Sobel 核能够更精细地检测梯度信息,适合检测较为平滑的边缘。

# Haar kernel
def Haar(order):block=np.ones([order,order]).astype(int)mask1=np.concatenate([-1*block,block],axis=0)mask2=np.concatenate([-1*block,block],axis=1)mask3=np.concatenate([block,-1*block,block],axis=0)mask4=np.concatenate([block,-1*block,block],axis=1)mask5=np.concatenate([mask1,-1*mask1],axis=1)mask=[mask1,mask2,mask3,mask4,mask5]return mask# 2D convolution for Haar kernel
def convolution_3(img,mask):sz_img=img.shapesz_kernel=mask.shape#[a,b]=sz_kernela=int(sz_kernel[0])b=int(sz_kernel[1])pimg=np.zeros(sz_img)for j in range(0,(sz_img[0]-a)):for k in range(0,(sz_img[1]-b)):for i in range(0,2):ximg=np.sum(img[j:j+a,k:k+b]*mask)#yimg=np.sum(img[j-a:j+a+1,k-b:k+b+1]*kernel2)pimg[j][k]=np.abs(ximg)return pimg

代码逻辑:
定义Haar卷积核,注意,给定一个维度数,会同时产生五个Haar卷积核,存放在数组中
mask1: 检测 水平边缘,例如物体的上下轮廓。
mask2: 检测 垂直边缘,例如物体的左右轮廓。
mask3: 检测 正对角线方向,捕捉从左上到右下的边缘。
mask4: 检测 反对角线方向,捕捉从左下到右上的边缘。
mask5: 检测 复杂变化,这是由 mask1 的进一步组合生成的更复杂卷积核,通过在水平和垂直方向进行进一步拼接。这种结构的卷积核可以检测图像中的 更复杂的变化模式,包括一些图像块内部的细节变化。它的作用不是单一的某个方向检测,而是组合式的模式检测,能捕捉图像中的更细腻特征。

# when mask size is 1, ploting the Haar kenerl processed image
mask=Haar(1)
print(mask)
for ma in mask:Haar_img = convolution_3(img,ma)plt.imshow(Haar_img,plt.cm.gray)plt.show()# when mask size is 2, ploting the Haar kenerl processed image
mask=Haar(2)
print(mask)
for ma in mask:Haar_img = convolution_3(img,ma)plt.imshow(Haar_img,plt.cm.gray)plt.show()

这个代码就是使用Haar的两个不同的size输出的效果。
结果就是Sobel 核提取图像的边缘;高斯核使图像模糊;不同的 Haar mask 效果不同。Type1 的输出像 sobel 一样提取边缘。Type2 的输出像高斯一样使图像模糊。Type3 看起来像是 type1 中 2 个输出的组合。
核的尺寸越大,核的效果越强。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux网络编程3

24.9.19学习目录 一.UDP&#xff08;续&#xff09;1.UDP编程2.注意点2.TFTPTFTP通信过程TFTP协议分析 一.UDP&#xff08;续&#xff09; 1.UDP编程 &#xff08;1&#xff09;sendto函数发送数据 向to结构体指针中指定的ip&#xff0c;发送UDP数据&#xff1b; 通过to和ad…

时间复杂度的常用符号+渐进时间复杂度分析

时间复杂度的常用符号 Θ \Theta Θ 如果 f ( n ) Θ ( g ( n ) ) f(n)\Theta(g(n)) f(n)Θ(g(n))&#xff0c;则 f ( n ) f(n) f(n) 与 g ( n ) g(n) g(n) 同阶。&#xff08;阶是指 f ( n ) f(n) f(n) 的指数&#xff0c;比如 n 2 n^2 n2 高于 n n n&#xff09; O O …

MacOS安装homebrew,jEnv,多版本JDK

1 安装homebrew homebrew官网 根据官网提示&#xff0c;运行安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装后&#xff0c;bash会提示执行两条命令 (echo; echo eval "$(/opt/homebrew/b…

海康威视摄像机和录像机的监控与回放

文章目录 海康威视摄像机和录像机的监控与回放1、海康威视监控设备简介1.1、摄像机二次开发1.1.1&#xff1a;协议选择 1.2&#xff1a;web集成1.2&#xff1a;标准协议对接1.2.1&#xff1a;ffmpeg软件转流1.2.2&#xff1a;开源监控软件shinobi1.2.3&#xff1a;使用nginx的R…

黑神话悟空mac可以玩吗

黑神话悟空mac上能不能玩对于苹果玩家来说很重要&#xff0c;那么黑神话悟空mac可以玩吗&#xff1f;目前是玩不了了&#xff0c;没有针对ios系统的版本&#xff0c;只能之后在云平台上找找了&#xff0c;大家可以再观望下看看。 黑神话悟空mac可以玩吗 ‌使用CrossOver‌&…

【海康威视面经】

海康威视面经 Java基础java常用集合 及其优缺点ArrayListVectorLinkedList Jvm调优监控发现问题工具分析问题 &#xff1a;性能调优GC频繁 出现内存泄漏 内存溢出CPU飙升 Synchronized和Volatile的比较反射线程池和new thread利弊高并发 集群 分布式 负载均衡 MySQL调优基础优化…

neo4j安装启动教程+对应的jdk配置

参考这位博主的视频教程&#xff1a;neo4j社区windows版下载 一、官网下载neo4j的安装包 &#xff08;1&#xff09;官网下载页面 &#xff08;2&#xff09;上一步 【download】之后&#xff0c;会自动下载&#xff0c;如果没有&#xff0c;点击【here】 这里可以看到一行字…

Gradio 自定义组件

如何使用 Gradio 自定义组件&#xff0c;Gradio 前端使用 Svelte&#xff0c;后端使用的 Python。如何自定义一个组件呢&#xff1f;Gadio 提供了类似于脚手架的命令&#xff0c;可以生成需要开发组件的前后和后端代码。 创建组件 运行如下命令&#xff0c;gradio 会自动生成…

[2025]基于微信小程序慢性呼吸系统疾病的健康管理(源码+文档+解答)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

开放标准如何破解企业数字化与可持续发展的困境:The Open Group引领生态系统架构创新

应对数字化与可持续发展的双重挑战&#xff0c;开放标准是关键 在当今快速变化的商业环境中&#xff0c;企业不仅需要通过数字化转型提升竞争力&#xff0c;还面临日益严格的可持续发展要求。开放标准正在成为企业破解这一双重挑战的核心工具。The Open Group 2024生态系统架构…

【MySQL】了解并操作MySQL的缓存配置与信息

目录 一、查看缓存配置 二、查看缓存信息 查询MySQL的缓存相关信息&#xff0c;一般我们用两个命令&#xff1a; show variables like %query_cache%; show status like %qcache%; 一、查看缓存配置 查看缓存配置的相关的系统变量变量&#xff0c;返回给我们服务器缓存的配置…

【SQL】百题计划:SQL内置函数“LENGTH“的使用

【SQL】百题计划-20240912 方法一&#xff1a; Select tweet_id from Tweets where LENGTH(content) > 15;– 方法二&#xff1a; Select tweet_id from Tweets where CHAR_LENGTH(content)> 15;

WordPress建站钩子函数及使用

目录 前言&#xff1a; 使用场景&#xff1a; 一、常用的wordpress钩子&#xff08;动作钩子、过滤器钩子&#xff09; 1、动作钩子&#xff08;Action Hooks&#xff09; 2、过滤器钩子&#xff08;Filter Hooks&#xff09; 二、常用钩子示例 1、添加自定义 CSS 和 JS…

HTB-Vaccine(suid提权、sqlmap、john2zip)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天来为大家讲解Vaccine靶机 渗透过程 信息搜集 服务器开放了 21FTP服务、22SSH服务、80HTTP服务 通过匿名登录FTP服务器 通过匿名登录到服务器&#xff0c;发现backup.zip文件&#xff0c;可能存在账号密码 发现b…

硬件工程师笔试面试——滤波器

目录 12、滤波器 12.1 基础 滤波器原理图 滤波器实物图 12.1.1 概念 12.1.2 滤波器的分类 12.1.3 滤波器的工作原理 12.1.4 滤波器的应用 12.1.5 滤波器设计的关键参数 12.2 相关问题 12.2.1 不同类型的滤波器在实际应用中的具体作用是什么? 12.2.2 如何设计一个简…

ABAP-Logger ABAP 日志记录与任何其他语言一样轻松

ABAP-Logger ABAP 日志记录与任何其他语言一样轻松 ABAP Logger SAP Logging as painless as any other language. ABAP Version: 702 or higher See the mission statement Features Record message in Application Log(BC-SRV-BAL)Display message Installation Insta…

记忆化搜索

目录 引言&#xff1a; 1. 什么是记忆化搜索&#xff1f; 2. 如何实现记忆化搜索&#xff1f; 一、斐波那契数 1. 题目链接&#xff1a;509. 斐波那契数 2. 题目描述&#xff1a; 3. 解法&#xff08;暴搜 -> 记忆化搜索 -> 动态规划&#xff09;&#xff1a; &am…

【楚怡杯】职业院校技能大赛 “云计算应用” 赛项样题六

某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenStack搭建企业内部私有云平台&#xff0c;开源Kubernetes搭建云原生服务平台&#xff0c;选…

涛思数据库安装和卸载

安装 cd opt/taos/TDengine-server-2.4.0.5 sudo ./install.sh 启动taos​ 安装后&#xff0c;请使用 systemctl 命令来启动 TDengine 的服务进程 systemctl start taosd检查服务是否正常工作&#xff1a; systemctl status taosd 升级 3.0 版在之前版本的基础上&#x…

使用 SpringBoot 基础web开发的支持

首先导入项目相关的依赖&#xff1a; pom.xml 文件&#xff1a; 导入相关项目依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…