Вот один из способов в Python / OpenCV. Просто получите контуры от оригинального серого изображения. Затем нарисуйте их черным над красным контурным изображением толщиной 3 пикселя (толщина края Собеля). Я отмечаю, что ваши два изображения имеют разный размер, и контуры смещены относительно серых полей. Почему это так?
Серый Оригинал:
Sobel Red Edges:
import cv2
import numpy as np
# read original image as grayscale
img = cv2.imread('gray_rectangle.png', cv2.IMREAD_GRAYSCALE)
hi, wi = img.shape[:2]
# read edge image
edges = cv2.imread('red_edges.png')
# edges image is larger than original and shifted, so crop it to same size
edges2 = edges[3:hi+3, 3:wi+3]
# threshold img
thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY)[1]
# get contours and draw them as black on edges image
result = edges2.copy()
contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]
cv2.drawContours(result, contours, -1, (0,0,0), 3)
# write result to disk
cv2.imwrite("red_edges_removed.png", result)
# display it
cv2.imshow("ORIG", img)
cv2.imshow("EDGES", edges)
cv2.imshow("THRESH", thresh)
cv2.imshow("RESULT", result)
cv2.waitKey(0)
Результат: