为了账号安全,请及时绑定邮箱和手机立即绑定

在python中去除图像中的十字标记

在python中去除图像中的十字标记

潇潇雨雨 2023-08-22 16:20:29
我正在开展一个图像处理项目,需要首先去除超声图像中的十字标记。我尝试了OpenCV中的各种过滤器。当内核很大时,它可能会去除标记,但会丢失很多细节并且太模糊。这是一个例子:
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

这是一种方法 - 我将让您在最后填写详细信息。我基本上是在黑色背景上创建一个白色十字,并使用“模板匹配”在超声图像中查找此类内容:


#!/usr/bin/env python3


import numpy as np

import cv2


# Make a white cross (+ sign) on a black background

cross = np.zeros((10,10), np.uint8)

cross[..., [4,5]] = 255

cross[[4,5], ...] = 255

十字架现在看起来像这样:


array([[  0,   0,   0,   0, 255, 255,   0,   0,   0,   0],

       [  0,   0,   0,   0, 255, 255,   0,   0,   0,   0],

       [  0,   0,   0,   0, 255, 255,   0,   0,   0,   0],

       [  0,   0,   0,   0, 255, 255,   0,   0,   0,   0],

       [255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

       [255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

       [  0,   0,   0,   0, 255, 255,   0,   0,   0,   0],

       [  0,   0,   0,   0, 255, 255,   0,   0,   0,   0],

       [  0,   0,   0,   0, 255, 255,   0,   0,   0,   0],

       [  0,   0,   0,   0, 255, 255,   0,   0,   0,   0]], dtype=uint8)

继续代码:


# Load ultrasound image

im = cv2.imread('ultrasound.jpg', cv2.IMREAD_GRAYSCALE)


# Look for crosses

res = cv2.matchTemplate(im, cross, cv2.TM_CCORR_NORMED)


# Contrast stretch

norm = cv2.normalize(res, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX)

cv2.imwrite("result.png", res)

这给出了:

https://img4.sycdn.imooc.com/64e470020001916705090379.jpg

然后,您可以使用阈值找到峰值,如下所示:

https://img3.sycdn.imooc.com/64e4701100013fee05020378.jpg

以这些点为中心绘制十字,最后使用修复来填充它们。



查看完整回答
反对 回复 2023-08-22
  • 1 回答
  • 0 关注
  • 1521 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信