2

グラフから線を抽出できるプログラムを作成したいと思います。

たとえば、このようなグラフが入力された場合、赤い線だけが出力されるようにします。 ここに画像の説明を入力

以下では、ハフ ライン変換を使用してこれを実行しようとしましたが、あまり有望な結果が得られません。

import cv2
import numpy as np

graph_img = cv2.imread("/Users/2020shatgiskessell/Desktop/Graph1.png")
gray = cv2.cvtColor(graph_img, cv2.COLOR_BGR2GRAY)

kernel_size = 5
#grayscale image
blur_gray = cv2.GaussianBlur(gray,(kernel_size, kernel_size),0)

#Canny edge detecion
edges = cv2.Canny(blur_gray, 50, 150)

#Hough Lines Transformation

#distance resoltion of hough grid (pixels)
rho = 1 
#angular resolution of hough grid (radians)
theta = np.pi/180 
#minimum number of votes
threshold = 15 

#play around with these
min_line_length = 25
max_line_gap = 20

#make new image
line_image = np.copy(graph_img)

#returns array of lines
lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]),
                    min_line_length, max_line_gap)

for line in lines:
    for x1,y1,x2,y2 in line:
        cv2.line(line_image,(x1,y1),(x2,y2),(255,0,0),2)


lines_edges = cv2.addWeighted(graph_img, 0.8, line_image, 1, 0)

cv2.imshow("denoised image",edges)


if cv2.waitKey(0) & 0xff == 27:
    cv2.destroyAllWindows()

これにより、以下の出力画像が生成されますが、これはグラフの線を正確に認識していません。どうすればこれを行うことができますか?

注: 今のところ、グラフのタイトルやその他のテキストは気にしません。

ここに画像の説明を入力

次のような他のグラフ画像でもコードが機能するようにしたいと思います 。ここに画像の説明を入力 ここに画像の説明を入力

4

1 に答える 1