Python实现索伯尔算子

最近在学习Python,正好用sobel算子练练手,将就看看吧
先放原图

用Opencv中sobel算子做一下对比:

# OpenCVori_img = cv.imread("C:\\Users\\BLYX\\Desktop\\test\\temple1.jpg")x = cv.Sobel(ori_img[:, :, 0], cv.CV_16S, 1, 0)y = cv.Sobel(ori_img[:, :, 0], cv.CV_16S, 0, 1)absX = cv.convertScaleAbs(x)absY = cv.convertScaleAbs(y)dst = cv.addWeighted(absX, 0.5, absY, 0.5, 0)cv.imshow("OpenCV's Result", dst)cv.waitKey(0)cv.destroyAllWindows()

结果图如下

然后用自己写的sobel实现如下:

 # self—designdef convertu8(num):if num > 255 or num < -255:return 255elif -255 <= num <= 255:if abs(num - int(num)) < 0.5:return np.uint8(abs(num))else:return np.uint8(abs(num)) + 1def sobel(img, k=0):row = img.shape[0]col = img.shape[1]image = np.zeros((row, col), np.uint8)s = time.time()for i in range(1, row - 1):for j in range(1, col - 1):y = int(img[i - 1, j + 1, k]) - int(img[i - 1, j - 1, k]) + 2 * (int(img[i, j + 1, k]) - int(img[i, j - 1, k])) + int(img[i + 1, j + 1, k]) - int(img[i + 1, j - 1, k])x = int(img[i + 1, j - 1, k]) - int(img[i - 1, j - 1, k]) + 2 * (int(img[i + 1, j, k]) - int(img[i - 1, j, k])) + int(img[i + 1, j + 1, k]) - int(img[i - 1, j + 1, k])image[i, j] = convertu8(abs(x) * 0.5 + abs(y) * 0.5)e = time.time()print(e - s)return imageif __name__ == '__main__':ori_img = cv.imread("C:\\Users\\BLYX\\Desktop\\test\\temple1.jpg")sobelimage = sobel(ori_img, 0)cv.imshow("my Result", sobelimage)cv.waitKey(0)cv.destroyAllWindows()

结果图如下

然后用ENVI比对了一下:


***blablablabla
可以看到三幅图相对比,第二幅图的视觉效果更好,当然不同的图片可能会对最终的结果产生影响。但经多组图片测试,可以得到在对水平锐化和垂直锐化图像赋予相同的权重叠合时,第二幅结果图在视觉上稍微优于OpenCV中的sobel,而在处理效率上却要低上很多。希望未来能够改进一下。
写得不好,还望大家指正!

Python实现索伯尔算子相关推荐

  1. 索伯(Sobel)算子原理讲解和实现

    文章结构 1. 简述Sobel算子 2. ndimage.Sobel 3. Sobel 算子自实现 4. Sobel算子的一些缺陷和替代方案 1. 简述Sobel算子 索伯算子主要用于边界检测,该算法 ...

  2. 【硅谷牛仔】Pinterest CEO--希伯尔曼--成功关键在推广而非技术

    简介 本·希伯尔曼(Ben Silbermann),1983年出生于美国爱荷华州,毕业于美国耶鲁大学政治系,曾就职于谷歌,后来与校友创办美国Pinterest图片分享社交网站并担任首席执行官. 创建经 ...

  3. 佩伯尔幻像_幻像类型提高了编译时的安全性

    佩伯尔幻像 介绍 使用幻像类型是一种非常简单的技术,可用于提高代码的编译时安全性. 有很多潜在的用例具有不同的复杂性级别,但是即使幻像类型的轻量级使用也可以显着提高编译时的安全性. 幻像类型只是带有未 ...

  4. 用Python中的马尔科夫链进行营销渠道归因

    用Python中的马尔科夫链进行营销渠道归因 --第一部分:"更简单 "的方法 任何积极开展营销活动的企业都应该对确定哪些营销渠道推动了实际转化率感兴趣.投资回报率(ROI)是一个 ...

  5. 语言学中不同视角的抽象与具体——谈索绪尔、乔姆斯基、韩礼德的语言观

    任何领域的学者或许都无法避免区分一种具体的现象和一种抽象的本质的问题,即现象-本质/具体-抽象的问题.这是因为研究者们似乎都不会仅仅满足于自己能观测到的东西--他们更想知道为什么自己会观测到这些东西. ...

  6. 用 Python 实现马丁格尔交易策略(附代码)

    所谓马丁格尔(Martingale)策略是在某个赌盘里,当每次「输钱」时就以2 的倍数再增加赌金,直到赢钱为止.假设在一个公平赌大小的赌盘,开大与开小都是50% 的概率,所以在任何一个时间点上,我们赢 ...

  7. 【Python面试必看系列】之Python 中的三元运算子

    Q 4. 解释一下 Python 中的三元运算子 python中并没有c++中的三元算子 : c=a>b?a:b //意思是如果a>b就将a赋值给c,否则将b赋值给c. 但是python中 ...

  8. 无轴螺旋输送机运行时链条有异响,奥伯尔带你了解问题所在

    无轴螺旋输送机以链条为牵引部件,与料斗一起完成物料输送工作. 运行中链条在运行中会发出很大的声响,或者随着运输发生一些异常等,运行中可能会发生一些异常. 这个时候初学者不能马上做出反应,但是今天厂家奥 ...

  9. python运算符and_Python AND运算子

    python运算符and Python operators can be divided into multiple categories. Two of them are – bitwise ope ...

最新文章

  1. 黑帽大会2014:10个酷炫的黑客工具
  2. SpringBoot中通过自定义缓存注解(AOP切面拦截)实现数据库数据缓存到Redis
  3. python-03 爬虫相关
  4. Socketpair 简介
  5. cygwin 编译 android vlc,Cygwin 编译 VLC 问题
  6. 杭州阿里、海康、网易等组成 的HR 联盟对打工人的影响
  7. android 字母索引三方,Android 字母索引动态自定义布局
  8. 设计模式笔记--委派
  9. 如何修改wampserver中mysql中字符编码的解决方案
  10. excel清空sheet内容 poi_Excel隐藏了一个sheet表,java poi中是可以读出来的,现在我不想读取隐藏的sheet表。...
  11. Java经典实例:实现一个简单堆栈
  12. hadoop2.2.0 core-site.xml--global properties
  13. JavaSE学习--正则表达式
  14. 【二维码识别】基于matlab GUI 灰度+二值化+校正QR二维码识别与生成【含Matlab源码 600期】
  15. python爬虫:爬东方财富网平安银行历史资金流向并写入MySQL
  16. 频段、信道带宽、EARFCN、频段和EARFCN之间的换算
  17. 虚拟机16.2去虚拟化教程 超详细全面讲解
  18. 基于PHP实现高性能敏感词过滤算法
  19. 如何写一份大家都满意的专利说明书
  20. 如何在html中加入注释,HTML如何加脚注(注释)?

热门文章

  1. 金山实习日记·真正的流水帐
  2. 航班管家发布《民航运行周报5.3- 5.9》
  3. iOS_开源项目合辑
  4. 最新调研-销售科技行业研究分析报告
  5. JackSon jar包下载
  6. VMWare和Virtual PC虚拟机的比较
  7. 自动生成跨多端骨架屏
  8. 阿里巴巴大数据实践-读书笔记
  9. Python编写一个函数,用于判断用户输入的字符串是否由小写字母和数字构成。
  10. SV 类的虚方法 多态