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,而在处理效率上却要低上很多。希望未来能够改进一下。
写得不好,还望大家指正!

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 虚拟机vmware卸载不彻底的解决办法是什么_虚拟机卸载不干净

    虚拟机vmware卸载不彻底的解决办法是什么_虚拟机卸载不干净安装不成功并提示。setuphasdetectedthatvmwareworkstationisalreadyinstalledonthismachinepleaseuninstallthisproductthroughadd/removeprogramsandtryagain1.VMware无法卸载及卸载不完全解决办法…

    2022年10月20日
    1
  • python面向对象编程指南 pdf_python面向对象的三个基本特征

    python面向对象编程指南 pdf_python面向对象的三个基本特征虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程。下面就来了解一下如何在Python中进行对象编程。一.如何定义一个类  在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法。  类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义:

    2025年6月24日
    0
  • struts2.0的工作原理「建议收藏」

    struts2.0的工作原理「建议收藏」客户端发出一个请求,服务器端StrutsPreparedAndExceuteFilter接收请求,如果该请求是一个以.action结尾请求,则Struts2将请求转发至相应的Action,进行数

    2022年7月2日
    20
  • 机器学习—决策树原理(python代码实现)

    机器学习—决策树原理(python代码实现)首先,决策树(DecisionTree)是一种基本的分类与回归方法,在这里主要讨论用于分类的决策树。决策树的学习通常包含三个步骤:特征选择,决策树的生成,决策树的剪枝。优点:计算复杂度不高,输出结果易于理解,对中间值的缺失值不敏感,可以处理不相关特征数据。 缺点:可能会产生过度匹配的问题。 使用数据类型:数值型和标称型。那么具体的来通过一个例子说明一下决策树。下面这个例子是通过贷款…

    2022年9月7日
    1
  • oracle数据库去重查询_oracle高效去重

    oracle数据库去重查询_oracle高效去重数据库多字段去重方法介绍:distinct关键字、groupby 、row_number()over()

    2022年10月1日
    0
  • 网站推荐:11个相似图片搜索网站(以图找图)

    网站推荐:11个相似图片搜索网站(以图找图)你想凭着一张现有图片找出它的原始图片,或者是凭着一张小的缩略图找出原始大图吗?下面的十款搜索引擎可以帮你实现,以图找图,以图搜图,以图片搜索相似的图片。一:http://tineye.com/Tineye是典型的以图找图搜索引擎,输入本地硬盘上的图片或者输入图片网址,即可自动帮你搜索相似图片,搜索准确度相对来说还比较令人满意。TinEye是加拿大Idée公司研发…

    2022年7月17日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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