我正在做一个图像处理项目,该项目需要先去除超声图像中的十字标记。
我在OpenCV中尝试了各种过滤器。当内核很大时,它可能会去除标记,但是会丢失很多细节并且太模糊。
这是一个例子:
python - 在Python中删除图像中的十字标记-LMLPHP

最佳答案

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

#!/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)
这给出了:
python - 在Python中删除图像中的十字标记-LMLPHP
然后,您可以使用阈值查找峰,如下所示:
python - 在Python中删除图像中的十字标记-LMLPHP
以这些点为中心绘制十字,最后使用in-painting填充它们。

关于python - 在Python中删除图像中的十字标记,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63980569/

10-12 18:31