gpt4 book ai didi

python - 在知道这些线条的角度的情况下,在质量很差的图像上找到线条的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 14:39:33 24 4
gpt4 key购买 nike

我正在尝试使用 Houghlines 变换找到这两条水平线。如您所见,图片非常嘈杂!目前我的工作流程如下所示:

  • 裁剪图像
  • 模糊它
  • 降低噪声(为此,我反转图像,然后将模糊图像减去反转图像)
  • 打开它并用“水平内核”(kernel_1 = np.ones((10,1), np.uint8)
  • 临界点
  • 粗线

  • 结果并没有想象中的那么好...有没有更好的策略,知道我会一直搜索 水平线 (因此, abs(theta) 将始终接近 0 或 pi )
    my raw image here
    threshold resultat

    最佳答案

    问题是噪音和微弱的信号。您可以通过平均/积分来抑制噪声,同时保持信号,因为它是沿着一个维度复制的(信号是一条线)。
    您使用非常宽但窄的内核的方法可以扩展为简单地沿整个图像进行集成。

  • 旋转图像,使可疑线条与轴对齐(假设水平)
  • 将一条扫描线(水平线)的所有像素相加,np.sum(axis=1)或意味着,无论哪种方式都要注意数据类型。使用浮点数很方便。
  • 处理一维值系列。

  • 这不会告诉你这条线有多长,只会告诉你它在那里并且可能跨越整个宽度。
    编辑:既然我的回答得到了回应,我也会详细说明:
    我认为您可以将其低通以获得“灰色”基线,然后减去(“高斯差”)。这应该给你一个很好的信号。
    import numpy as np
    import cv2 as cv
    import matplotlib.pyplot as plt
    import scipy.ndimage

    im = cv.imread("0gczo.png", cv.IMREAD_GRAYSCALE) / np.float32(255)
    relief = im.mean(axis=1)
    smoothed = scipy.ndimage.gaussian_filter(relief, sigma=2.0)
    baseline = scipy.ndimage.gaussian_filter(relief, sigma=10.0)
    difference = smoothed - baseline
    std = np.std(difference)
    level = 2
    outliers = (difference <= std * -level)
    plt.plot(difference)
    plt.hlines([std * +level, std * -level], xmin=0, xmax=len(relief))
    plt.plot(std * -level + outliers * std)
    plt.show()
    # where those peaks are:
    edgemap = np.diff(outliers.astype(np.int8))
    (edges,) = edgemap.nonzero()
    print(edges) # [392 398 421 427]
    print(edgemap[edges]) # [ 1 -1 1 -1]
    the plot

    关于python - 在知道这些线条的角度的情况下,在质量很差的图像上找到线条的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65293813/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com