我正在研究一个涉及隔离太阳能电池板与房屋隔离的问题。 房子和面板都是相同的颜色。
注意:图片中有两个房子。我指的是偏蓝的那个。 PFB图像以及我的方法。
欢迎任何有关如何处理此类情况的见解。
我的方法
Dialate /侵蚀。
hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
## Thresholding values
red_MIN = np.array([100, 10, 10],np.uint8)
red_MAX = np.array([130, 255, 255],np.uint8)
frame_threshed = cv2.inRange(hsv_img, red_MIN, red_MAX)
k_dialation = np.ones((5,5),np.uint8)
dialation = cv2.dilate(frame_threshed,k_dialation, iterations =5)
k = np.ones((3,3),np.int8)
erosion = cv2.erode(dialation,k,iterations =8)
我也尝试过绘制轮廓进行形状分析,
但由于面板和房屋在顶部和类似区域都有相同的形状,这种方法不起作用。
答案 0 :(得分:0)
由于问题涉及将太阳能电池板与屋顶隔离,因此您无法期望通用的OpenCV解决方案能够解决问题。使用有监督的学习方法可以是一种选择。
如果您想将屋顶与太阳能电池板隔离开来,我们可以观察到的一个区别是太阳能电池板具有一定的重复独特图案。这可以用于工作。让我向您介绍这种称为稀疏代码直方图的方法。
它更像是HOG,其中物体被形状(渐变)识别,而HSC采用“通过学习和 使用更具表现力的本地表示 比渐变“。
然后,作为改进,您可以尝试区域提议算法,如选择性搜索,而不是基于滑动窗口的方法。
HSC从火车图像中生成信号字典(此处的信号是图像块),然后从这些信号中重建测试图像。然后生成用于再生每个信号的代码的直方图。由于您感兴趣的区域是唯一的,因此会为您的对象和背景生成不同的代码集,因此可以进行区分。将其传递给SVM可以轻松隔离太阳能电池板。
您可以使用mlpack进行稀疏编码实现。 所有最好的太阳能电池板数据集。
选择性搜索后的图像(没有阈值处理等因此更通用的用法):
如果您发现以上所有内容非常难以实施。找到选择性搜索区域内的“+”符号。您可以使用模板匹配或HOG。那么+的比率越高的地区就是太阳能电池板。