【问题标题】:extracting graph from printed ecg从打印的心电图中提取图形
【发布时间】:2018-10-28 20:33:24
【问题描述】:

我在堆栈上发现了一个这样的问题,但没有得到回答,而且我的图像不同。

我有这张你在下面看到的图片。

我想提取图像上的图形。我尝试了很多方法来提取它。阈值似乎不起作用,因为 rgb 值非常接近,尤其是在图形的峰值处。我曾尝试使用渐变来检测图像上的流动,但它也失败了。我尝试组合不同的颜色空间(HLS、YUV、LAB),它有一些输出,但它正在删除图形的某些部分。我还尝试创建 8X8 或更小的掩码矩阵,以获得平均像素值并删除低于该值的所有内容。还创建中值过滤。最后两个结合前面提到的一些技术有所帮助,但它们正在消除峰值,因为差异最小。你知道有什么更好的方法可以帮助我吗?

注意:我使用 Python

【问题讨论】:

    标签: python python-3.x opencv image-processing cv2


    【解决方案1】:

    你可以玩弄你的图像阈值(HSV)

    import cv2
    import numpy as np
    from PIL import Image
    import PIL.ImageOps   
    
    img=cv2.imread("ekg.jpg")
    BLACK_MIN = np.array([0, 0, 0],np.uint8)
    BLACK_MAX = np.array([255, 255, 80],np.uint8)
    hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    frame_threshed = cv2.inRange(hsv_img, BLACK_MIN, BLACK_MAX)
    cv2.imwrite('threshed.jpg', frame_threshed)
    image = Image.open('threshed.jpg')
    inverted_image = PIL.ImageOps.invert(image)
    inverted_image.save('invert.jpg')
    img2=cv2.imread("invert.jpg")
    cv2.imshow('image1', img2)
    

    【讨论】:

    • 正如我所说的,正如你所见,峰值几乎从图像中移除,它们对我来说是最重要的。
    • @kavko 尝试在放大后执行相同的操作。然后将图像调整回原始大小。
    • 试过了,但没有任何变化......也许将图像切割成更小的部分并分别对每个部分应用不同的阈值参数会更好
    • 是的,最终的解决方案是切成小块,但如果有更好的方法,我很感兴趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2013-06-12
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多