Python实现索伯尔算子[通俗易懂]

Python实现索伯尔算子[通俗易懂]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)

大家好,又见面了,我是你们的朋友全栈君。

Python实现索伯尔算子

最近在学习Python,正好用sobel算子练练手,将就看看吧
先放原图
在这里插入图片描述
用Opencv中sobel算子做一下对比:

# OpenCV
    ori_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—design
def convertu8(num):
if num > 255 or num < -255:
return 255
elif -255 <= num <= 255:
if abs(num - int(num)) < 0.5:
return np.uint8(abs(num))
else:
return np.uint8(abs(num)) + 1
def 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 image
if __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,而在处理效率上却要低上很多。希望未来能够改进一下。
写得不好,还望大家指正!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158981.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • leetcode – Missing Ranges

    leetcode – Missing Ranges

  • 虚拟机桥接模式下设置静态IP地址无法上网

    虚拟机桥接模式下设置静态IP地址无法上网宿主机:win7虚拟机:Fedora24上网:无线路由器+ADSL虚拟机采用桥接模式,之前虚拟机的网卡配置为DHCP模式,通过无线路由器动态分配一个192.168.1.xxx的IP地址,可以上网。由于最近需要虚拟机的IP地址固定,就设置了一个镜头IP地址:192.168.1.30,结果发现虚拟机无法上网了。折腾了半天发现,在vmware的网络编辑器中,不要使用自动,要明确选择桥接到联网的

  • AWS EC2文件上传[通俗易懂]

    AWS EC2文件上传[通俗易懂]AWSEC2申请配置、文件上传、nginx安装部署、tomcat安装和项目部署、域名绑定AWSEC2服务器申请配置我这里是参考简书的一篇博客:利用AWS的EC2来搭建属于自己的VPN服务器(MAC平台)在步骤4搭建vpn服务器之前都是可以通用的。非常的详细。文件上传经过以上配置之后应该了解到,使用ssh命令访问aws服务器是会用到其提供的秘钥文件的(我这里是serverK…

  • php 实现工厂模式 实例

    php 实现工厂模式 实例工厂模式:由工厂类根据参数来决定创建出哪一种产品类的实例工厂类是指包含了一个专门用来创建其他对象方法的类。根据传入参数进行选择返回具体类的实例。主要作用就是对象创建的封装、简化创建对象的操作。也就是调用工厂类的一个方法(传入参数)来得到需要的类<?php//定义一个抽象类abstractclassOperation{protected$numA=0;protected$numB=0;protected$result=0;.

  • 什么是WinHTTP?「建议收藏」

    什么是WinHTTP?「建议收藏」WinHTTP的全称是MicrosoftWindowsHTTPServices,它提供给开发者一个HTTP客户端应用程序接口(API),通过这种API借助HTTP协议给其他的HTTP服务器发

  • javatype和jdbctype作用_javatype

    javatype和jdbctype作用_javatypeJDBCType JavaTypeCHAR StringVARCHAR StringLONGVARCHAR StringNUMERIC java.math.BigDecimalDECIMAL java.math.BigDecimalBIT booleanBOOLEAN booleanTINYINT byte

    2022年10月20日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号