我正试图在这张图片中找到不同形状的岩石。
(来源:nasa.gov)
我没有从边缘检测中得到任何令人满意的结果。
我确实读过有关 grabcut 的内容,但同样也没有令人满意的内容。关于我应该如何进行的任何想法?
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 的新手。
(来源:nasa.gov)
最佳答案
岩石是图像的一部分,比沙 block 更简单。您可以尝试获取文件的每一行,将其分成小段,然后计算该段的峰度。
Kurtosis是对段中值频率的钟形曲线的“高度”和“宽度”的度量。沙子的峰态明显低于岩石,因为它具有“更宽”的频谱。具有高峰度的片段很可能属于岩石。
因此,这将是确定图像的每条线必须划分成的段的理想长度的问题。这不是一项微不足道的任务,但也不是一项艰巨的任务。您要识别的最小岩石宽度的一半(但至少是一粒沙子宽度的 100 倍)应该可以解决问题。
关于python - 如何使用 OpenCV (python) 检测此图像中的岩石?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35054313/