本文提供一种提取图像边缘的快速算法

更多提取图像边缘的方法:
最大-最小滤波器实现图像边缘提取
Prewitt滤波器和Sobel滤波器提取图像边缘
拉普拉斯滤波器提取图像边缘

差分金字塔提取图像边缘算法:

将原图像先缩小2倍,再放大2倍(都使用双线性插值算法)[在此过程中主要是图像的高频部分被模糊了]。得到了原图像的模糊图像。将原图像减去模糊图像,得到了图像的边缘。就是这么简单!

实验代码

import cv2
import numpy as np
import matplotlib.pyplot as plt# Grayscale
def BGR2GRAY(img):# Grayscalegray = 0.2126 * img[..., 2] + 0.7152 * img[..., 1] + 0.0722 * img[..., 0]return gray# Bi-Linear interpolation
def bl_interpolate(img, ax=1., ay=1.):if len(img.shape) > 2:H, W, C = img.shapeelse:H, W = img.shapeC = 1aH = int(ay * H)aW = int(ax * W)# get position of resized imagey = np.arange(aH).repeat(aW).reshape(aW, -1)x = np.tile(np.arange(aW), (aH, 1))# get position of original positiony = (y / ay)x = (x / ax)ix = np.floor(x).astype(np.int)iy = np.floor(y).astype(np.int)ix = np.minimum(ix, W-2)iy = np.minimum(iy, H-2)# get distance dx = x - ixdy = y - iyif C > 1:dx = np.repeat(np.expand_dims(dx, axis=-1), C, axis=-1)dy = np.repeat(np.expand_dims(dy, axis=-1), C, axis=-1)# interpolationout = (1-dx) * (1-dy) * img[iy, ix] + dx * (1 - dy) * img[iy, ix+1] + (1 - dx) * dy * img[iy+1, ix] + dx * dy * img[iy+1, ix+1]out = np.clip(out, 0, 255)out = out.astype(np.uint8)return out# Read image
img = cv2.imread("../bird.png").astype(np.float)gray = BGR2GRAY(img)# Bilinear interpolation
out = bl_interpolate(gray.astype(np.float32), ax=0.5, ay=0.5)# Bilinear interpolation
out = bl_interpolate(out, ax=2., ay=2.)out = np.abs(out - gray)out = out / out.max() * 255out = out.astype(np.uint8)# Save result
cv2.imshow("result", out)
cv2.waitKey(0)
cv2.imwrite("out.jpg", out)

实验结果:


点个赞再走呗,谢谢了!

使用差分金字塔提取图像边缘 python实现相关推荐

  1. 图像边缘提取 java_提取图像边缘

    利用java打开一张图片,并提取其边缘.功能有打开文件,以及提取边缘. 算法原理 由于边缘提取的算法有很多种,而提取的精度在相同阈值的情况下也会有不同的结果. 这次我的边缘提取使用索贝尔算子(Sobe ...

  2. Prewitt滤波器的实现,对比Prewitt滤波器和Sobel滤波器提取图像边缘的效果

    一. Prewitt滤波器简介 Prewitt是一种常用的检测图像边缘的滤波器,它分为横向和纵向算子,分别用于检测纵向和横向的边缘(注意:横向形式的滤波器检测图像的纵向边缘,纵向形式的滤波器检测图像的 ...

  3. 利用拉普拉斯滤波器提取图像边缘,实现图像锐化

    一. 拉普拉斯滤波器简介: 我们知道: 拉普拉斯算子 ↑ x方向上二阶偏导数的数值近似计算 ↑ y方向上二阶偏导数的数值近似计算 ↑ 拉普拉斯算子在平面内的数值近似 ↑ 拉普拉斯滤波器卷积核表示 ↑ ...

  4. 小波变换 边缘检测 matlab,边缘检测算子和小波变换提取图像边缘【matlab】

    Roberts边缘检测算子:根据一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差. 小波变换的方法比较适用于展现夹带在正常信号中的瞬间反常现象,具有方向敏感性.所以可以边缘检 ...

  5. 利用matlab写一个简单的拉普拉斯变换提取图像边缘

    可以证明,最简单的各向同性微分算子是拉普拉斯算子.一个二维图像函数 f(x,y) 的拉普拉斯算子定义为 其中,在 x 方向可近似为 同理,在 y 方向上可近似为 于是 我们得到满足以上三个公式的两个变 ...

  6. Canny提取图像边缘后使用闭运算连接断线

    实验: # Writer : wojianxinygcl@163.com # Date  : 2020.3.22 import cv2 as cv import numpy as np image = ...

  7. 利用matlab自带函数快速提取二值图像的图像边缘 bwperim函数

    clear all;close all;clc; I = imread('rice.png'); I = im2bw(I); J = bwperim(I); % 提取二值图像图像边缘 figure; ...

  8. matlab 提取图像轮廓(图像边缘提取)

    利用edge()函数提取图像轮廓,绘制出对象的边界和提取边界坐标信息,matlab实现代码如下: close all;clear all;clc; % 提取图像轮廓,提取图像边缘 I = imread ...

  9. python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...

    python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 python opencv 1,读取图像 2,图像变矩阵 3,图像转灰度图像 4,彩色图像是3D数组 5,灰度图像是2 ...

最新文章

  1. 傅里叶频域,复数域,冲激函数,香农采样(不介绍公式-只介绍是啥)另一种思维
  2. nginx日志模块及日志格式
  3. Discuz X2论坛数据库MyISAM转InnoDB的脚本
  4. static在内存层面的作用_static的作用和内存划分?
  5. java设计模式之道文字版,Java Web设计模式之道 PDF
  6. 调整的飞秋官网幅度还非常的大
  7. Dubbo的远程回调
  8. Android开发笔记(八十九)单例模式
  9. 计算机组组内培训记录,计算机教研组活动记录
  10. 作为字节跳动的研发面试官,有些话我不得不说!
  11. [Curator] Leader Latch 的使用与分析
  12. vmware给linux虚拟机添加新的分区
  13. taro 如何使用dom_taro创建的小程序项目怎么引用ant design mobile UI库
  14. 手机桌面隐藏大师_应用隐藏大师app
  15. mysql 主键 外键
  16. 视差角计算公式及其推导
  17. 12.51单片机实现电子音乐盒
  18. 家用wifi的配置和重置
  19. M5311模组烤机测试装置(Arduino)
  20. linux的qt下wsadata,Qtcpserver仅在调试器下返回listen函数的未知错误

热门文章

  1. 零基础学python用哪本书好-零基础想要学习Python编程 ,不知道看哪本书?
  2. 树莓派百度语音识别+图灵机器人对话聊天机器人
  3. rs232接口_、 迪文串口屏TTL与主控板RS232电平信号转换方案
  4. mysql代码的核心类_mysql源码---核心类 (1)线程类
  5. Web API-时间对象和戳
  6. akamai:与看视频广告等待相比,用户更不能忍受缓冲等待
  7. pythonmax函数原理_Softmax函数原理及Python实现
  8. 计算机人员简历英语,计算机专业英文个人简历范文
  9. php获取图片所有颜色代码,php 获取一张图片所有点的颜色值
  10. Chrome浏览器导出插件crx