我试图在这张图片中找到形状不同的岩石。

python - 如何使用OpenCV(python)检测此图像中的岩石?-LMLPHP
(来源:nasa.gov)

边缘检测没有得到令人满意的结果。

python - 如何使用OpenCV(python)检测此图像中的岩石?-LMLPHP

我确实读过关于抢夺的内容,但还是没有一个令人满意的结果。关于我应该如何进行的任何想法?

PS-我的最终目标是用不同的颜色标记图像中的这些岩石。

更新1:
这是我用于边缘检测的代码。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('image1.JPG',0)
edges = cv2.Canny(img,255,255)

plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])

plt.show()

更新2:我有几张相似的图片,如下面的图片,其中清晰可见岩石(大尺寸)。边缘检测再次在图像上产生不令人满意的结果。我只是在寻找可以尝试的方法。如果您建议使用一种方法,请在我可以阅读更多内容的地方添加相关链接,我是opencv的新手。

python - 如何使用OpenCV(python)检测此图像中的岩石?-LMLPHP
(来源:nasa.gov)

最佳答案

岩石是图像中比沙子块更平坦的部分。您可以尝试获取文件的每一行,将其分成小段,然后计算该段的峰度。

Kurtosis是段中值频率的钟形曲线的“高度”和“宽度”的量度。沙地的峰度要比岩石低得多,因为沙地的频谱范围更广。峰度高的部分很可能属于岩石。

因此,要确定必须将图像的每一行划分成的段的理想长度。这不是一项艰巨的任务,也不是一项艰巨的任务。要识别的最小岩石宽度的一半(但至少是一粒沙子的宽度的100倍)应该可以解决。

10-06 05:20