我有一组蝴蝶图像,用于训练我的系统从给定的输入图像中分割出蝴蝶。为此,我想提取诸如边缘、角落、区域边界、局部最大/最小强度等特征。
我发现了许多特征提取方法,例如 Harris 角点检测、SIFT,但是当图像背景与蝴蝶的身体/边界颜色相同时,它们效果不佳。
任何人都可以告诉是否有任何好的特征提取方法适用于蝴蝶分割?我正在使用 OpenCV 的 Python 实现。
我有一组蝴蝶图像,用于训练我的系统从给定的输入图像中分割出蝴蝶。为此,我想提取诸如边缘、角落、区域边界、局部最大/最小强度等特征。
我发现了许多特征提取方法,例如 Harris 角点检测、SIFT,但是当图像背景与蝴蝶的身体/边界颜色相同时,它们效果不佳。
任何人都可以告诉是否有任何好的特征提取方法适用于蝴蝶分割?我正在使用 OpenCV 的 Python 实现。
你愿意编写自己的图像处理逻辑吗?
您最好的选择可能是针对您的问题优化分割/特征提取,而不是使用以前的实现,例如用于更一般用例的 opencv。
我发现在嘈杂/低对比度环境中运行良好的一个选项是使用滑动窗口(即 10x10 像素)并构建梯度方向直方图。从这个直方图中,您可以识别出更多优势边缘的存在(它们在直方图中累积)及其方向(允许检测角等事物)并查看局部最大值/最小值。(如果需要我可以提供更多细节)
如果您对整体分割和用户交互感兴趣,我建议您使用图形切割或抓取切割。在图形切割中,用户将能够微调分割。抓取剪切已经在 opencv 中,但可能会导致相同的问题,因为它需要用户的单个输入,然后自动分割图像。
您可以尝试通过将训练数据(butterlys 的图像)上传到demo.nanonets.ai(免费使用)来构建模型
1) 在此处上传您的训练数据:
2)然后使用以下(Python代码)查询API:
import requests
import json
import urllib
model_name = "Enter-Your-Model-Name-Here"
url = "https://i.ytimg.com/vi/xT6UsQwZyy0/maxresdefault.jpg"
files = {'uploadfile': urllib.urlopen(url).read()}
url = "http://demo.nanonets.ai/classify/?appId="+model_name
r = requests.post(url, files=files)
print json.loads(r.content)
3)响应看起来像:
{
"message": "Model trained",
"result": [
{
"label": "Black Swallowtail",
"probability": 0.97
},
{
"label": "Orange Sulphur",
"probability": 0.025
},
{
"label": "Monarch",
"probability": 0.005
}
]
}