python实现ROA算子边缘检测算法(以光学图像为例)

python实现ROA算子边缘检测算法

讲解

代码

import numpy as np
import cv2 as cv


def ROA(image_path, save_path, threshold):
    img = cv.imread(image_path)
    image = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
    new = np.zeros((512, 512), dtype=np.float64)  # 开辟存储空间
    width = img.shape[0]
    heigh = img.shape[1]
    for i in range(width):
        for j in range(heigh):
            if i == 0 or j == 0 or i == width - 1 or j == heigh - 1:
                new[i, j] = image[i, j]
                continue
            print(image[i, j])
            if image[i, j] < 60:
                continue
            num_sum = 0.0
            u1 = (image[i - 1, j - 1] + image[i, j - 1] + image[i + 1, j - 1]) / 3
            u2 = (image[i - 1, j + 1] + image[i, j + 1] + image[i + 1, j + 1]) / 3
            r12 = 1.0
            if float(u2) - 0.0 > 1e6:
                r12 = float(u1) / float(u2)
            if float(u1) - 0.0 > 1e6:
                r12 = float(u2) / float(u1)
            num_sum += r12

            u1 = (image[i - 1, j - 1] + image[i, j - 1] + image[i - 1, j]) / 3
            u2 = (image[i + 1, j] + image[i + 1, j + 1] + image[i, j + 1]) / 3
            r12 = 1.0
            if float(u2) - 0.0 > 1e6:
                r12 = float(u1) / float(u2)
            if float(u1) - 0.0 > 1e6:
                r12 = float(u2) / float(u1)
            num_sum += r12

            u1 = (image[i - 1, j - 1] + image[i - 1, j] + image[i - 1, j + 1]) / 3
            u2 = (image[i + 1, j - 1] + image[i + 1, j] + image[i + 1, j + 1]) / 3
            r12 = 1.0
            if float(u2) - 0.0 > 1e6:
                r12 = float(u1) / float(u2)
            if float(u1) - 0.0 > 1e6:
                r12 = float(u2) / float(u1)
            num_sum += r12

            u1 = (image[i - 1, j] + image[i - 1, j + 1] + image[i, j + 1]) / 3
            u2 = (image[i, j - 1] + image[i + 1, j - 1] + image[i + 1, j]) / 3
            r12 = 1.0
            if float(u2) - 0.0 > 1e6:
                r12 = float(u1) / float(u2)
            if float(u1) - 0.0 > 1e6:
                r12 = float(u2) / float(u1)
            num_sum += r12
            new[i, j] = num_sum / 4.0
            if new[i, j] > threshold:
                new[i, j] = 100
                print(new[i, j])

    print(new)

    cv.imwrite(save_path, new)


if __name__ == "__main__":
    image_path = r""
    save_path = r""
    threshold = 
    ROA(image_path, save_path, threshold)

运算结果
运算前
在这里插入图片描述
运算后
在这里插入图片描述

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZRX_GIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值