利用sobel算子提取图像的水平特征和竖直特征
一. sobel滤波器介绍
sobel滤波器常用来提取灰度图像的水平边缘(水平特征)和竖直边缘(竖直特征)
二. sobel算子
纵向算子,提取图像水平边缘 ↑
横向算子,提取图像竖直边缘 ↑
三. 实验:python实现sobel算子并将算子作用于图像
import cv2import numpy as np# Gray scaledef BGR2GRAY(img):b = img[:, :, 0].copy()g = img[:, :, 1].copy()r = img[:, :, 2].copy()# Gray scaleout = 0.2126 * r + 0.7152 * g + 0.0722 * bout = out.astype(np.uint8)return out# sobel filterdef sobel_filter(img, K_size=3):if len(img.shape) == 3:H, W, C = img.shapeelse:H, W = img.shape# Zero paddingpad = K_size // 2out = np.zeros((H + pad * 2, W + pad * 2), dtype=np.float)out[pad: pad + H, pad: pad + W] = img.copy().astype(np.float)tmp = out.copy()out_v = out.copy()out_h = out.copy()## Sobel verticalKv = [[1., 2., 1.],[0., 0., 0.], [-1., -2., -1.]]## Sobel horizontalKh = [[1., 0., -1.],[2., 0., -2.],[1., 0., -1.]]# filteringfor y in range(H):for x in range(W):out_v[pad + y, pad + x] = np.sum(Kv * (tmp[y: y + K_size, x: x + K_size]))out_h[pad + y, pad + x] = np.sum(Kh * (tmp[y: y + K_size, x: x + K_size]))out_v = np.clip(out_v, 0, 255)out_h = np.clip(out_h, 0, 255)out_v = out_v[pad: pad + H, pad: pad + W].astype(np.uint8)out_h = out_h[pad: pad + H, pad: pad + W].astype(np.uint8)return out_v, out_h# Read imageimg = cv2.imread("../paojie.jpg").astype(np.float)# grayscalegray = BGR2GRAY(img)# sobel filteringout_v, out_h = sobel_filter(gray, K_size=3)# Save resultcv2.imwrite("out_g.jpg",gray)cv2.imshow("result_g",gray)cv2.imwrite("out_v.jpg", out_v)cv2.imshow("result_v", out_v)cv2.imwrite("out_h.jpg", out_h)cv2.imshow("result_h", out_h)cv2.waitKey(0)cv2.destroyAllWindows()
四. 实验结果
原图 ↑
原图转换为灰度图像 ↑
sobel横向算子提取了图像的竖直特征 ↑
sobel纵向算子提取了图像的水平特征 ↑
从本实验结果我们观察到,在提取图像在水平或者垂直方向上的线条或轮廓时,可以使用sobel算子。
五. 参考内容:
https://www.cnblogs.com/wojianxin/p/12504622.html
https://www.jianshu.com/p/4b13fc189eba
利用sobel算子提取图像的水平特征和竖直特征相关推荐
- python sobel算子_利用sobel算子计算图像的梯度(python+opencv)
sobel算子计算的梯度图是带有方向的 代码实现如下: #coding=utf-8 import cv2 import numpy as np #利用sobel算子计算图像的梯度 img=cv2.im ...
- OPENCV(四)对图像进行水平投影和竖直投影
本篇博客讲述如何使用python的openCV库实现对图像的水平投影和竖直投影: 关键代码如下: import cv2#读取图片 image1 = cv2.imread('../img/123.png ...
- java 提取轮廓_TensorFlow 卷积操作模拟sobel算子提取图像轮廓
注意: sobel算子不保证结果在0-255,需要做一次归一化处理,再乘以255 输出的数据shape与图像的shape不一样,需要一次转化 效果 代码 import matplotlib.pyplo ...
- Java + OpenCV 对图像进行水平投影和竖直投影
核心代码如下,我也没有运行过,从 python 翻译过来的一份代码, 自己测试试一下效果吧. 介意的请勿订阅. package com.biubiu.example;import org.opencv ...
- 基于Sobel算子的图像边缘检测
一.Sobel算子 Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,然而在很多实际应用的场合,sobel边缘却是首选,Sobel算子是高斯 ...
- 图像水平梯度和竖直梯度代码_Opencv图像处理(三)
晓强Deep Learning的读书分享会,先从这里开始,从大学开始.大家好,我是晓强,计算机科学与技术专业研究生在读.我会不定时的更新我的文章,内容可能包括深度学习入门知识,具体包括CV,NLP方向 ...
- 利用Sobel算子,求梯度图像
学习了Sobel算子,总结一下 上图中的模板为Sobel算子,之所以其中的系数是这样的,是因为和求他们偏导邻域的近似形式有关,具体请看书. 自己编写的利用Sobel算子,求梯度图像的matlab程序 ...
- sobel算子检测图像清晰度
文章目录 前言 概念 图像处理.视觉等基础概念 清晰度判断概念 sobel算子是什么? Sobel原理 Sobel实现 Sobel应用 改进的八方向sobel算子基于的理论 视觉系统 sobel算子实 ...
- 应用sobel算子算法c语言,Canny算子与Sobel算子求图像边缘的C代码实现
*Canny算子与Sobel算子求图像边缘笔记* 1.Canny求边缘算法原理简述 Canny检测边缘主要分为以下 四个算法步骤: A:噪声去除 canny算子是通过对每个像素点求一阶导数来找到梯度明 ...
最新文章
- 无线网***工具进攻方法及防范技巧
- abap 常用系统变量
- mmz-asio4delphi死链接的解决办法
- PHP与Java使用des加密通讯
- 存档丢失以后再补之R语言与logistic模型
- 【caffe-Windows】以mnist为例的hdf5单标签处理——matlab实现
- jzoj3913-艰难的选择【差分,统计】
- 移除collection中元素的注意事项(应用collection.remove移除元素造成的错误)
- 解析java文件_使用JDK的Parser来解析Java源代码
- 计算机专业实习实训内容和要求,大学生计算机实习目的和要求.doc
- python+jpype+linux出现内存溢出问题解决方案
- ndows 内存诊断工具,Windows10自带内存检测工具的使用方法
- mysql中utf8和utf8mb4区别,MySQL中utf8和utf8mb4的区别
- 如何调用腾讯的IP库?
- APP - 朋友圈广告原来是可以关掉的
- Unite 2018|基于照片建模的游戏制作流程
- 《kafka面试100例 -6》如果在/admin/delete_topics/中手动写入一个节点会不会正常删除Topic
- Ubuntu-18.04版本网络配置,连接网络的方法
- 微信小程序+腾讯地图 获取定位与地图选点插件
- 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第01节 计算属性
热门文章
- python自学网站-自学python有什么网站
- python所有软件-如何在Python中列出所有已安装的软件包及其版本?
- 学python语言有前途吗-在成都学Python有发展前景吗?
- 蝙蝠未能连接到服务器是什么原因,打开蝙蝠侠提示网络异常或者连接不上
- Vue前端路由~非常详细哦,不要错过
- Web API-随机性案例步骤
- FFmpeg的H.264解码器源代码简单分析:概述
- jpa内网mysql_mysql+jpa简单实现步骤
- 手机怎么打开f12_碰到生僻字看不懂怎么办?打开手机这个开关,一键即可秒懂...
- IDEA 编译时 报 “常量字符串过长” 解决办法