图像处理——边缘提取

  • Roberts operator
    • 理论分析
    • 编码实现

Roberts operator

理论分析

他山之玉 可以攻石,点击这里可以学习相关理论。
版权声明:本文为CSDN博主「TechArtisan6」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zaishuiyifangxym/article/details/89840396

经过一些计算,我们得到Roberts 算子 [[0 , 1], [-1, 0] ] 和 [[1 , 0 ], [0 , -1]]
(与博主的顺序不太一致,但对图片效果没有影响)

编码实现

# -*- coding: utf-8 -*-
# 用简单的算子引出边缘检测的一般流程
import cv2
import numpy as np
import matplotlib.pyplot as pltdef convolution(matrix, c_kernel):# 正常卷积完后会少半圈(与计算方式有关)rows, columns = matrix.shape# 这里提前补上了result_matrix = matrix.copy().astype(np.int16)for i in range(0, rows-1):for j in range(0, columns-1):result_matrix[i][j] = (result_matrix[i][j]*c_kernel[0][0] +result_matrix[i+1][j]*c_kernel[1][0] +result_matrix[i][j+1]*c_kernel[0][1] +result_matrix[i+1][j+1]*c_kernel[1][1])return result_matrixdef Roberts_Edge_Detection(source_img):# 输入灰度图,输出边缘提取后的灰度图rows, columns = source_img.shapeimg = source_img.copy()# Roberts算子Roberts_1 = np.array([[0, 1], [-1, 0]], dtype=int)Roberts_2 = np.array([[1, 0], [0, -1]], dtype=int)# step2 卷积x = convolution(img, Roberts_1)y = convolution(img, Roberts_2)# 也可以调用cv2的filter2D函数。# x = cv2.filter2D(img, cv2.CV_16S, Roberts_1)# y = cv2.filter2D(img, cv2.CV_16S, Roberts_2)# # 转换卷积后的图片深度,转uint8absX = cv2.convertScaleAbs(x)absY = cv2.convertScaleAbs(y)Roberts_img = np.zeros((rows, columns), dtype=np.uint8)# 或 Roberts_img = np.array([[0]*columns]*rows).astype(np.uint8)for i in range(rows):for j in range(columns):Roberts_img[i][j] = 0.5*absX[i][j] + 0.5*absY[i][j]# 或 Roberts = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)return Roberts_imgif __name__ == "__main__":# 用imread时需要注意图片路径不要包含中文,否则会can't open/read file: check file path/integrity# cv2.IMREAD_GRAYSCALE 读入灰度图source_img = cv2.imread('pictures\\source\\1.jpg', cv2.IMREAD_GRAYSCALE)# 文件中说In the case of color images, the decoded images will have the channels stored in **B G R** order.彩色图读入BGRresult_img = Roberts_Edge_Detection(source_img)# 用来正常显示中文标签plt.rcParams['font.sans-serif'] = ['SimHei']# plt.imshow()里添加参数cmap=“gray”,显示灰度图plt.subplot(121), plt.imshow(source_img, cmap="gray"), plt.title('source imge'), plt.axis('off')  # 坐标轴关闭plt.subplot(122), plt.imshow(result_img, cmap="gray"), plt.title('Roberts operator imge'), plt.axis('off')# 保存图片plt.savefig('pictures\\result\\1_Roberts operator result.jpg', bbox_inches='tight')plt.show() # 显示在屏幕上

作者才疏学浅,文章或有不足,请大家多多指教!!!

边缘提取之Roberts算子相关推荐

  1. 图像边缘提取——梯度算子、Roberts算子、prewitt算子、Sobel算子、Kirsch算子、LOG算子的matlab实现

    #图像边缘提取-- ##梯度算子.Roberts算子.prewitt算子.Sobel算子.Kirsch算子.LOG算子的matlab实现 matlab代码 clear; f=rgb2gray(imre ...

  2. python图像锐化 增强边缘_[Python图像处理]十一.图像锐化与边缘检测之Roberts算子、Prewitt算子、Sobel算子和Laplacian算子,Schar算子...

    Roberts算子 Roberts算子即为交叉微分算法,它是基于交叉差分的梯度算法,通过局部差分计算检测边缘线条.常用来处理具有陡峭的第噪声图像,当图像边缘接近于正45度或负45度时,该算法处理效果更 ...

  3. MATLAB的Roberts算子与Sobel算子

    function [ output_args ] = Untitled4( input_args ) close all clear all I=imread('PeppersRGB.bmp'); % ...

  4. opencv roberts算子_边缘检测 Roberts算子

    Roberts算子是一种最简单的算子,利用局部差分算子寻找边缘的算子.采用对角线相邻两像素之差近似梯度幅值检测边缘..检测垂直边缘的效果比斜向边缘要好,定位精度高,对噪声比较敏感,无法抑制噪声的影响. ...

  5. Sobel和Roberts算子的推导过程

    Sobel和Roberts算子,这两个算子是梯度算子,是一阶微分算子,可以用来检测图像的边缘.推导过程如下所示,以便以后方便. Sobel算子的推导: Roberts算子的推导: 关于Image En ...

  6. Opencv2.4学习::边缘检测(4)Roberts算子

    边缘检测 1.Sobel 2.Laplace 3.Roberts 4.Canny Roberts 就是以对角线作为差分的方向来检测 实现代码: #include<opencv2/core/cor ...

  7. 边缘检测,Roberts 算子,Sobel算子,Canny 算子

    边缘检测 在图像中,边缘是图像局部强度变化最明显的地方,它主要存在于目标与目标.目标与背景.区域与区域之间.边缘表明一个特征区域的终结和另一特征区域的开始.边缘所分开区域的内部特征或属性是一致的,而不 ...

  8. 【8】python-opencv3教程:边缘检测(Roberts算子边缘检测,Prewitt算子边缘检测,Sobel算子边缘检测)

    第八节:边缘检测 边缘检测:边缘检测指的是灰度值发生急剧变化的位置,边缘检测的目的是制作一个线图,在不会损害理解图像内容的情况下, 有大大减少了图像的数据量,提供了对图像数据的合适概述. 一:Robe ...

  9. opencv roberts算子_图像之HOG特征描述算子-行人检测

    4.1 简介 本次任务将学习一种在深度学习之前非常流行的图像特征提取技术--方向梯度直方图(Histogram of Oriented Gradients),简称HOG特征.HOG特征是在2005年C ...

最新文章

  1. html %3c% page,page.html
  2. 无法启动MySQL数据库
  3. poj 2392 dp 不是很懂哎!!!Space Elevator
  4. VTK:PolyData之TriangleColoredPoints
  5. MyEclipse修改项目名称后,部署到tomcat问题。
  6. Java调用存储过程返回数组
  7. Guava Cache 使用笔记
  8. 微信小程序-蓝牙设备连接-蓝牙开门
  9. python判断正数负数_python 负数变正数
  10. 学生用计算机中括号怎么打,大括号怎么打,教您word大括号怎么输入
  11. 版权符号©的输入方法
  12. 华为交换机命令 端口速率_华为S5700交换机的端口QOS限速问题
  13. 《Rough set-based feature selection for weakly labeled data》
  14. Ternary String
  15. 用加密算法给女朋友写封情书
  16. 三无电子烟与即将到来的监管时代
  17. 深度神经网络之Keras(三)——正则化、超参数调优和学习方向
  18. GPRS模块 测试项目
  19. 港科夜闻|香港科大2021年本科计划招生190人,首推人工智能延伸主修
  20. android studio报错Error:Project with path 'XXXX' could not be found解决办法

热门文章

  1. 在线听著名英文原版小说(朗读版超赞)
  2. ODI(Oracle Data Integrator)基本使用教程(1)
  3. strip 命令的用法
  4. 钉钉企业内部开发工具配置
  5. 基于SSM实现的物流管理系统(完美运行,包含数据库源代码,可远程调试)
  6. MySQL基础学习笔记
  7. win10家庭版开启Hyper-V
  8. keil 调试 操作系统_调试操作系统:内存分配的经验教训
  9. C#|Winform编程之(列表视图控件)listView控件
  10. Sia(Siacoin/SC/云储币)去中心化存储平台网址汇总