03Roberts算子
文章目录
- 前言
- 一、单方向上的锐化
- 二、无方向上的锐化
- 1.Roberts算子
前言
记录学习锐化算子的代码和思路。使用的图像为lena小姐姐。
一、单方向上的锐化
由于图像我们可以认为由垂直和水平两个方向组成,因此,单方向上的锐化也考虑水平锐化和垂直锐化。
选择水平和垂直锐化模板为H1,H2。
import cv2
import numpy as npimport img_filter2D #我自己写的卷积求和函数,可以使用第三库函数代替img = cv2.imread("lena.bmp",0)
H1 = np.array([[1,2,1],[0,0,0],[-1,-2,-1]])
H2 = np.array([[1,0,-1],[2,0,-2],[1,0,-1]])new_img1 = img_filter2D.my_filter2D(img,H1)
new_img2 = img_filter2D.my_filter2D(img,H2)cv2.imshow("Horizontal",new_img1)
cv2.imshow("Vertical",new_img2)cv2.waitKey(0)
cv2.destroyAllWindows()
结果图如下。
由于我们使用的模板有负数的存在,因此,有可能会在某些区域产生负的像素值的现象。
解决这个主要有两个思路:
1.每个像素位置都+一个常数,最后将像素的范围限制在0-255,但这种处理方式会出现“浮雕”现象
2.取绝对值。其实是对边缘有方向的提取。
效果图如下:
二、无方向上的锐化
1.Roberts算子
Roberts算子是一种常用的边缘检测算子,它是由Lawrence Roberts于1963年提出的。它主要是用于图像中的边缘检测,可以对图像进行快速检测,检测到的边缘效果较为明显。
Roberts算子是一种基于差分的算子,其主要思想是通过对像素点之间的差分来检测图像中的边缘。Roberts算子将每个像素与其右下方的像素进行差分运算,然后将两个差值取绝对值的和作为该像素的边缘强度值。因此,Roberts算子在计算边缘时只考虑了左上到右下和左下到右上两个方向。
Roberts算子的计算公式如下:
Gx = |img(x+1, y+1) - img(x, y)|
Gy = |img(x, y+1) - img(x+1, y)|
G(x, y) = Gx + Gy
其中,Gx和Gy分别表示在水平和垂直方向上的差分值,G(x, y)表示该像素的边缘强度值。
代码如下(示例):
import cv2# 读入图像
img = cv2.imread('image.jpg')
# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用Roberts算子进行边缘检测
edges = cv2.roberts(gray)
# 显示并保存边缘检测结果
cv2.imshow('Edges (Roberts)', edges)
cv2.waitKey(0)
cv2.imwrite('edges_roberts.jpg', edges)
自己写的roberts函数如下:
def my_roberts(img):h,w = img.shape[:2]G = np.zeros((img.shape[0],img.shape[1]),dtype=np.float32)for i in range(h-1):for j in range(w-1):Gx = abs(img[i+1][j+1]-img[i][j])Gy = abs(img[i+1][j]-img[i][j+1])G[i][j] = Gx+Gynew_img = np.clip(G, 0, 255).astype(np.uint8)return new_img
问题:一直报这个错误,但是我没想明白为什么会溢出。
C:\Users\14605\Desktop\co\Roberts.py:14: RuntimeWarning: overflow encountered in ubyte_scalarsGx = abs(img[i+1][j+1]-img[i][j])
C:\Users\14605\Desktop\co\Roberts.py:15: RuntimeWarning: overflow encountered in ubyte_scalarsGy = abs(img[i+1][j]-img[i][j+1])
C:\Users\14605\Desktop\co\Roberts.py:16: RuntimeWarning: overflow encountered in ubyte_scalarsG[i][j] = Gx+Gy
结果图:
03Roberts算子相关推荐
- 写算子单元测试Writing Unit Tests
写算子单元测试Writing Unit Tests! 一些单元测试示例,可在tests/python/relay/test_op_level3.py中找到,用于累积总和与乘积算子. 梯度算子 梯度算子 ...
- 如何将算子添加到Relay
如何将算子添加到Relay 本文将介绍在Relay中注册新TVM算子所需的步骤.将PR添加累积产品运算示例.PR本身建立在另一个PR的基础上,该PR添加了一个累积和运算. 注册新算子需要几个步骤: 添 ...
- 使用Tensor Expression张量表达式处理算子
使用Tensor Expression张量表达式处理算子 这是TVM中Tensor表达语言的入门教程.TVM使用特定于域的张量表达式来进行有效的内核构造. 本文将演示使用张量表达式语言的基本工作流程. ...
- 在Relay中注册新TVM算子
在Relay中注册新TVM算子 在本文件中,将介绍在Relay中注册新TVM算子所需的步骤.将以添加累积算子的PR为例.PR本身建立在另一个PR的基础上,该PR添加了一个累积和运算. 注册新算子需要几 ...
- TVM darknet yolov3算子优化与量化代码的配置方法
TVM darknet yolov3算子优化与量化代码的配置方法 使用以下接口函数 tvm.relay.optimize quantize.quantize 实际代码: convert nnv ...
- TensorFlow算子融合
TensorFlow算子融合 • TensorFlow的特点: o 真正的可移植性 o 引入各种计算设备的支持,包括CPU,GPU,以及能够很好的运行在各种系统的移动端 o 多语言支持 o 支持C++ ...
- TVM图优化与算子融合
TVM图优化与算子融合 计算图的定义 Computational graphs: a common way to represent programs in deep learning framewo ...
- MXNet 图优化与算子融合
MXNet 图优化与算子融合Graph Optimization and Quantization based on subgraph and MKL-DNN Purpose MKL-DNN引入了两个 ...
- TVM优化Deep Learning GPU算子
TVM优化Deep Learning GPU算子 高效的深度学习算子是深度学习系统的核心.通常,这些算子很难优化,需要HPC专家付出巨大的努力. 端到端张量IR / DSL堆栈TVM使这一过程变得更加 ...
最新文章
- 【廖雪峰python入门笔记】list_创建
- 查看远端的端口是否通畅3个简单实用案例!
- [tarjan] poj 1236 Network of Schools
- 静态局部变量和全局变量的区别!
- php post处理,PHP处理GETPOST方法
- NetBeans Java EE技巧7:忽略的Java类和XHTML编辑器快捷方式
- REVERSE-PRACTICE-BUUCTF-20
- !DOCTYPE 标签是什么
- **python基础函数(十一)
- hdu 1358 Period
- 使用sharepoint自带的文本编辑器1
- 用标准C编写COM dll
- mac 安装zkcli_mac zookeeper安装使用
- 某度文库付费文档下载,实测可用~
- hdu多校(三)1004 Tokitsukaze and Multiple(easydp)
- 制作游戏辅助/外挂违法吗?
- 互联网审判中区块链存证技术的应用进路
- (E2)ENVI-met模型建立——创建项目及数据库的使用
- 为什么我不建议你将python作为入门编程语言
- 元素王座服务器维护,元素王座最新版
热门文章
- 学习通信原理之——从实验中理解频谱/功率谱/功率谱密度(MATLAB演示)
- 什么是接口测试和功能测试?
- Android Studio使用Composing builds统一依赖管理
- Powell算法、Powell修正算法_matlab仿真
- 手把手教你用Unity做出MMD,不用一行代码让你的动漫人物动起来!
- java凑数问题,包子凑数——Java
- 数字信号处理 --- 用离散傅里叶变换(循环卷积)实现线性卷积(个人学习笔记)
- sdh管理单元指针_SDH管理单元指针介绍.doc
- osgEarth目标选择
- Ubuntu开发环境_TLP电源管理模块、禁用笔记本触摸板