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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UVa409_Excuses, Excuses!(小白书字符串专题)[通俗易懂]

    UVa409_Excuses, Excuses!(小白书字符串专题)

    2022年2月6日
    46
  • 图形的光栅化_简述图像的采样和量化过程

    图形的光栅化_简述图像的采样和量化过程在前面的学习中,我们已经可以通过MVP变换,把摄像机观测的物体都压缩成了一个标准立方体,接下来我们要做的是把这个标准立方体绘制到屏幕(Screen)上何为屏幕?一个二维数组,每个元素称之为像素(pixel,pictureelement的缩写),例如我们常说的屏幕分辨率1920*1080,就是说有这么些个像素。屏幕是一个典型的光栅成像设备。光栅(Raster)在德语中就是屏幕的意思,光栅化(Rasterize,名变动)就是把东西画在屏幕上。像素,最小单位,像素内的颜色可以用rgba来定义,一

    2022年8月30日
    7
  • IDEA20.3.1激活码(最新序列号破解)

    IDEA20.3.1激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    175
  • latex 公式换行的命令

    latex 公式换行的命令2019独角兽企业重金招聘Python工程师标准>>>…

    2022年6月10日
    41
  • 配置 PyCharm for Linux 设置启动图标 pycharm-edu-2021.3.1 Ubuntu 18.04.6 LTS

    配置 PyCharm for Linux 设置启动图标 pycharm-edu-2021.3.1 Ubuntu 18.04.6 LTS安装PyCharm下载PyCharm教育版,使用tar-zxvf命令将其解压到你希望的软件安装位置,解压完就是安装完了,要选择一个你有全部权限的目录,一般在自己家目录下挑选位置即可。cd到安装目录下,执行以下命令运行PyCharm,第一次运行会有一些选择内容,按实际选择即可。cdbin/./pycharm.sh安装完成!自定义图标固定到收藏夹在下面两个路径中任选,创建matlab.desktop文件。前者是系统全局的,后者是当前用户私有的/usr/share/appl

    2025年8月23日
    4
  • C语言 socket函数

    C语言 socket函数socket#include<sys/types.h>#include<sys/socket.h>intsocket(intdomain,inttype,intprotocol);参数描述domain设置通信域(本地(PF_LOCAL),ipv4(AF_INET),ipv6()等)type设置套接字通信类型(TCP,双向字…

    2022年7月14日
    14

发表回复

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

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