参考文献:

https://zh.wikipedia.org/wiki/索貝爾算子

代码:

# reference : https://zh.wikipedia.org/wiki/索貝爾算子
from skimage import filters,io
import numpy as np
import matplotlib.pyplot as plt
gx = np.array([[-1,0,1],[-2,0,2],[-1,0,1]])
gy = np.array([[1,2,1],[0,0,0],[-1,-2,-1]])
#
def sobel(img):height = img.shape[0]width = img.shape[1]tmp_img = img.copy()for i in range(1,height-1):for j in range(1, width-1):tmpx = np.sum(np.sum(gx * img[i-1:i+2,j-1:j+2]))tmpy = np.sum(np.sum(gy * img[i-1:i+2,j-1:j+2]))tmp_img[i,j] = np.sqrt(tmpx**2 + tmpy **2)return tmp_imgimg = io.imread("/Applications/Python/SuperpixelMethod/SLIC-master/6.jpg",as_gray=True)
sobel_img = filters.sobel(img)
sobel_img_my = sobel(img.copy())print("ok")
plt.subplot(131)
plt.imshow(img,cmap="gray")
plt.title("Input Image")plt.subplot(132)
plt.imshow(sobel_img)
plt.title("Using Sobel Lib from Skimage")plt.subplot(133)
plt.imshow(sobel_img_my)
plt.title("Using Sobel Lib from Mine")
plt.show()

运行效果:

不同API的加载方式,对边缘提取的效果的影响:

比较skimage.io, opencv.imread的提取效果:

代码:

# reference : https://zh.wikipedia.org/wiki/索貝爾算子
from skimage import filters,io
import numpy as np
import matplotlib.pyplot as plt
import scipy
import cv2 as cvgx = np.array([[-1,0,1],[-2,0,2],[-1,0,1]])
gy = np.array([[1,2,1],[0,0,0],[-1,-2,-1]])
# gx_7x7 = np.zeros(shape=(7,7))
# gx_7x7
#
def sobel(img):height = img.shape[0]width = img.shape[1]tmp_img = img.copy()for i in range(1,height-1):for j in range(1, width-1):tmpx = np.sum(np.sum(gx * img[i-1:i+2,j-1:j+2]))tmpy = np.sum(np.sum(gy * img[i-1:i+2,j-1:j+2]))tmp_img[i,j] = np.sqrt(tmpx**2 + tmpy **2)return tmp_imgimg = io.imread("/Applications/Python/SuperpixelMethod/21592360769_.pic_hd.jpg",as_gray=True)
img_cv = cv.imread("/Applications/Python/SuperpixelMethod/21592360769_.pic_hd.jpg",cv.IMREAD_GRAYSCALE)
sobel_img_cv = filters.sobel(img_cv)
sobel_img_my_cv = sobel(img_cv)sobel_img = filters.sobel(img)
sobel_img_my = sobel(img.copy())scipy.misc.imsave("/Applications/Python/SuperpixelMethod/21592360769_.pic_hd_sobel_my_cv.jpg",sobel_img_my_cv)
scipy.misc.imsave("/Applications/Python/SuperpixelMethod/21592360769_.pic_hd_sobel_my.jpg",sobel_img_my)
scipy.misc.imsave("/Applications/Python/SuperpixelMethod/21592360769_.pic_hd_sobel_skimage.jpg",sobel_img)
scipy.misc.imsave("/Applications/Python/SuperpixelMethod/21592360769_.pic_hd_sobel_skimage_cv.jpg",sobel_img_cv)print("ok")
plt.subplot(231)
plt.imshow(img,cmap="gray")
plt.title("Input Image")plt.subplot(232)
plt.imshow(sobel_img,cmap="gray")
plt.title("Using Sobel Lib from Skimage,Load skimage")plt.subplot(233)
plt.imshow(sobel_img_my)
plt.title("Using Sobel Lib from Mine,Load skimage")plt.subplot(234)
plt.imshow(img,cmap="gray")
plt.title("Input Image")plt.subplot(235)
plt.imshow(sobel_img_cv,cmap="gray")
plt.title("Using Sobel Lib from Skimage,Load cv")plt.subplot(236)
plt.imshow(sobel_img_my_cv)
plt.title("Using Sobel Lib from Mine,Load cv")plt.show()

运行效果:

红色箭头的所指的图像边缘提取效果比黄色箭头所指向的图像边缘提取效果好。

原因:

skimage 加载出来的图像灰度值分布:0~1;

cv 加载出来的图像灰度值分布为:0~255;

python实现Sobel边缘提取相关推荐

  1. Python:实现sobel边缘检测算法(附完整源码)

    Python:实现sobel边缘检测算法 # coding=gbk import cv2 img = cv2.imread("1.jpg", 0) x = cv2.Sobel(im ...

  2. python:实现sobel filter索贝尔过滤器算法(附完整源码)

    python:实现sobel filter索贝尔过滤器算法 import numpy as np from cv2 import COLOR_BGR2GRAY, cvtColor, imread, i ...

  3. python+opencv:边缘提取-Sobel operator

    在理想情况下,对图像应用边缘检测器的结果可能会导致一组连接曲线,表明物体的边界,表面标记的边界以及对应于表面方向不连续点的曲线. 因此,对图像应用边缘检测算法可以显著减少要处理的数据量,因此可以过滤掉 ...

  4. python canny 保留指定区域的轮廓线_opencv python:Canny边缘提取

    Canny是边缘提取算法,在1986年提出的 是一个很好的边缘检测器 Canny算法介绍 非最大信号抑制: 高低阈值连接: example import cv2 as cv import numpy ...

  5. Python OpenCV -- Sobel 算子(九)

    Sobel  算子 Sobel  算子 -- 是一种带有方向性的滤波器, 在Python 中的原型: dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize ...

  6. 细化 Sobel 边缘提取

    bool SobelVerEdge(cv::Mat srcImage, cv::Mat& resultImage) {CV_Assert(srcImage.channels() == 1);s ...

  7. python检测(sobel、scharr、laplacian梯度检测)

    1.sobel 通过sobel算子来检测图像的梯度 cv2.Sobel()函数用来检测梯度 x方向是右-左来得到梯度 y方向是下-上 最后 对x方向和y方向上的结果求和得出最后的梯度检测 不建议直接用 ...

  8. python sobel滤波_Sobel滤波器

    一. sobel滤波器介绍 sobel滤波器常用来提取灰度图像的水平边缘(水平特征)和竖直边缘(竖直特征) 二. sobel算子 纵向算子,提取图像水平边缘 ↑ 横向算子,提取图像竖直边缘 ↑ 三. ...

  9. sobel算子及python实现

    简介  sobel算子是图像边缘检测的最重要的算子之一,在机器学习.数字媒体.计算机视觉等领域起着重要作用.由Irwin Sobel在1968年的一次博士课题讨论会上提出.本文主要介绍了Sobel算子 ...

最新文章

  1. 谷歌一员工确诊新冠肺炎:已大面积限制员工出行
  2. 一个偷偷修改工作目录的幕后黑手
  3. csp 通信网络 java_CSP 通信网络
  4. densenet论文_DRCN论文解读
  5. 什么是cname a记录
  6. nginx location 斜杠_【一点资讯】斜杠青年双·11买什么本最划算?光影精灵6让你做“多面娇娃” www.yidianzixun.com...
  7. linux 软件包 rpm命令之安装、更新、卸载、依赖
  8. android mainactivity 刷新fragment,Android刷新从FragmentActivity android.support.v4.app.Fragment
  9. 2017杭州云栖大会FAQ(持续更新中)
  10. 软件项目经理必备素质(转载)
  11. PAT Basic 1011
  12. swagger2 配置访问路径_有了Swagger2 再也不用担心API文档的维护了
  13. 用线性代数解释图论中的一些结论
  14. 红色警戒在win10下运行办法
  15. uk码对照表_【鞋子尺码对照表】 全面轻松了解鞋子尺码对照表 让你购物无困扰...
  16. Golang 操作临时文件和目录
  17. windows7打印时,显示脱机,提示“服务器打印后台处理程序服务没有运行”。...
  18. java根据入参不同调不同方法_java根据传入参数不同调用不同的方法,求高手支妙招!...
  19. stata生成脉冲响应图怎么导出_Stata:面板VAR模型(pvar2命令)
  20. 电脑宏碁acer care center充电限值怎么第二天自动关闭

热门文章

  1. STM32 系统定时器(SysTick)
  2. markdown部分语法技巧1 -字体-换行-缩进
  3. Quartz (3) 常见api解释
  4. 收费应用免费了 - APP应用《我懂了-做个好宝宝》二至五期即日起免费
  5. React16版本中render阶段放弃了使用递归
  6. 计算机专业,应该学习前端还是后端?具体有什么不一样?
  7. 【论文阅读】GRI: General Reinforced Imitation and its Application to Vision-Based Autonomous Driving
  8. selenium对浏览器操作、鼠标操作等总结
  9. 模块,什么是模块,怎么实现模块
  10. 于佳 计算机科学技术学院,于佳-青岛大学生命科学学院