文章目录

  • 前言
  • 一、单方向上的锐化
  • 二、无方向上的锐化
    • 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算子相关推荐

  1. 写算子单元测试Writing Unit Tests

    写算子单元测试Writing Unit Tests! 一些单元测试示例,可在tests/python/relay/test_op_level3.py中找到,用于累积总和与乘积算子. 梯度算子 梯度算子 ...

  2. 如何将算子添加到Relay

    如何将算子添加到Relay 本文将介绍在Relay中注册新TVM算子所需的步骤.将PR添加累积产品运算示例.PR本身建立在另一个PR的基础上,该PR添加了一个累积和运算. 注册新算子需要几个步骤: 添 ...

  3. 使用Tensor Expression张量表达式处理算子

    使用Tensor Expression张量表达式处理算子 这是TVM中Tensor表达语言的入门教程.TVM使用特定于域的张量表达式来进行有效的内核构造. 本文将演示使用张量表达式语言的基本工作流程. ...

  4. 在Relay中注册新TVM算子

    在Relay中注册新TVM算子 在本文件中,将介绍在Relay中注册新TVM算子所需的步骤.将以添加累积算子的PR为例.PR本身建立在另一个PR的基础上,该PR添加了一个累积和运算. 注册新算子需要几 ...

  5. TVM darknet yolov3算子优化与量化代码的配置方法

    TVM darknet yolov3算子优化与量化代码的配置方法 使用以下接口函数  tvm.relay.optimize  quantize.quantize 实际代码: convert nnv ...

  6. TensorFlow算子融合

    TensorFlow算子融合 • TensorFlow的特点: o 真正的可移植性 o 引入各种计算设备的支持,包括CPU,GPU,以及能够很好的运行在各种系统的移动端 o 多语言支持 o 支持C++ ...

  7. TVM图优化与算子融合

    TVM图优化与算子融合 计算图的定义 Computational graphs: a common way to represent programs in deep learning framewo ...

  8. MXNet 图优化与算子融合

    MXNet 图优化与算子融合Graph Optimization and Quantization based on subgraph and MKL-DNN Purpose MKL-DNN引入了两个 ...

  9. TVM优化Deep Learning GPU算子

    TVM优化Deep Learning GPU算子 高效的深度学习算子是深度学习系统的核心.通常,这些算子很难优化,需要HPC专家付出巨大的努力. 端到端张量IR / DSL堆栈TVM使这一过程变得更加 ...

最新文章

  1. 【廖雪峰python入门笔记】list_创建
  2. 查看远端的端口是否通畅3个简单实用案例!
  3. [tarjan] poj 1236 Network of Schools
  4. 静态局部变量和全局变量的区别!
  5. php post处理,PHP处理GETPOST方法
  6. NetBeans Java EE技巧7:忽略的Java类和XHTML编辑器快捷方式
  7. REVERSE-PRACTICE-BUUCTF-20
  8. !DOCTYPE 标签是什么
  9. **python基础函数(十一)
  10. hdu 1358 Period
  11. 使用sharepoint自带的文本编辑器1
  12. 用标准C编写COM dll
  13. mac 安装zkcli_mac zookeeper安装使用
  14. 某度文库付费文档下载,实测可用~
  15. hdu多校(三)1004 Tokitsukaze and Multiple(easydp)
  16. 制作游戏辅助/外挂违法吗?
  17. 互联网审判中区块链存证技术的应用进路
  18. (E2)ENVI-met模型建立——创建项目及数据库的使用
  19. 为什么我不建议你将python作为入门编程语言
  20. 元素王座服务器维护,元素王座最新版

热门文章

  1. 学习通信原理之——从实验中理解频谱/功率谱/功率谱密度(MATLAB演示)
  2. 什么是接口测试和功能测试?
  3. Android Studio使用Composing builds统一依赖管理
  4. Powell算法、Powell修正算法_matlab仿真
  5. 手把手教你用Unity做出MMD,不用一行代码让你的动漫人物动起来!
  6. java凑数问题,包子凑数——Java
  7. 数字信号处理 --- 用离散傅里叶变换(循环卷积)实现线性卷积(个人学习笔记)
  8. sdh管理单元指针_SDH管理单元指针介绍.doc
  9. osgEarth目标选择
  10. Ubuntu开发环境_TLP电源管理模块、禁用笔记本触摸板