边缘检测算子——一阶之Robertes cross算子

原文链接:https://blog.csdn.net/saltriver/article/details/78987170
假设某像素与其8领域用如下矩阵表示:
在这里插入图片描述
那么,根据图像梯度的定义:
gx = z8 - z5
gy = z6 - z5
上面提到,这种原始定义的梯度只是这种灰度值变化情况的度量工具,这种度量工具只有这一种吗?显然不是的!
z9-z5算不算灰度值的变化?z1-z5呢?z7-z5呢?z4-z5呢?z3-z5呢?

我们利用梯度的本质目的,是要找到某像素与其相邻像素的灰度差值,并放大这种差值,从而用于图像增强。而原始定义的梯度计算方法只是灰度差值计算方法中的一种,还可以有其它计算方法来度量这种变化。

为简化起见,我们把这些计算方法统称为梯度算子。根据不同的相邻像素差值计算得到的效果可能有所不同,但基本原理是一致的
* Roberts Cross(罗伯特交叉梯度)算子
例如罗伯特(Roberts)交叉梯度算子,定义的是:
gx = z9-z5
gy = z8-z6
为什么名字中有“交叉”,看看下图就知道了。
在这里插入图片描述
我们可以看到,不管是原始梯度也好,Roberts算子也好,都只是利用了z5,z6,z8,z9的像素值
下面用Roberts交叉算子来看看图像增强的效果。

import cv2

import numpy as np
moon = cv2.imread("moon.tif", 0)
row, column = moon.shape
moon_f = np.copy(moon)
moon_f = moon_f.astype("float")

Roberts = np.zeros((row, column))

for x in range(row - 1):
    for y in range(column - 1):
        gx = abs(moon_f[x + 1, y + 1] - moon_f[x, y])
        gy = abs(moon_f[x + 1, y] - moon_f[x, y + 1])
        Roberts[x, y] = gx + gy

sharp = moon_f + Roberts
sharp = np.where(sharp < 0, 0, np.where(sharp > 255, 255, sharp))
sharp = sharp.astype("uint8")

cv2.imshow("moon", moon)
cv2.imshow("Roberts_sharp", sharp)
cv2.waitKey()

输出结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值