我正在尝试提取图像中前景对象的视差图。使用颜色提取前景对象,最终目的是确定提取的对象的坐标。下面是提取了红色物体的视图的蒙面左图像
然后有正确的图像
背景基本上是一个巨大的窗口,我想忽略它,我只关心找到红色(或我后来选择的任何颜色)对象的位置。
在OpenCV示例中使用SGBM算法的参数后,主要是
int SADWindowSize
int minDisparity
int numberOfDisparities
我无法获得令人满意的结果,更确切地说,算法无法很好地处理蒙版部分的均匀纹理。我将发布两个例子来说明。 SADWindowSize
是这些示例中唯一不同的参数,因为它提供了最独特的结果。
示例1:窗口大小= 9,差异数= 64
示例2:窗口尺寸较小= 23且视差数= 64
较大的窗口尺寸会产生更多不良的污点。
问题:在计算视差图时掩盖背景是否是错误的方法?另一种可能的方法是计算视差图然后应用蒙版,但我不确定在这种情况下结果的合理性。
请注意,相机和校准以及图像(和遮罩)已得到纠正。
答案 0 :(得分:2)
在计算深度图之前屏蔽并没有意义,因为算法需要比较指定的空间来找到相应的像素。由于大量黑色像素,使用掩模会导致信息不足。所以,你所尝试的对我们而言是直观的,但应用程序无法轻易确定哪些像素代表相同的点。
我不确定但是如果你在左视图中使用蒙版来表达差异,那么你应该得到你期待的东西。或屏蔽// Called by using
// Changed a bit, because of multiple overloads
// @Html.Select2DropdownFor(o => o.InTeamsUID).ToHtml("autocompleteUrl",null, new DropdownOptions {Multiple = true})
private readonly Expression<Func<TModel, TProperty>> _propertyExpression;
public MvcHtmlString ToHtml(string url, IDictionary<string, object> htmlAttributes, DropdownOptions options)
{
var propertyName = _htmlHelper.NameFor(_propertyExpression).ToString();
var propertyId = _htmlHelper.IdFor(_propertyExpression).ToString();
var propertyValueString = _htmlHelper.ValueFor(_propertyExpression);
if (propertyValueString != null)
propertyValueString = new MvcHtmlString(propertyValueString.ToString());
var container = new TagBuilder("span");
if (!_htmlHelper.ViewData.ModelState.IsValidField(_htmlHelper.NameFor(_propertyExpression).ToString()))
container.AddCssClass("has-error");
var input = new TagBuilder("select")
.Merge(htmlAttributes, true)
.Class(_selectOptions.Multiple ? "enable-remote-multi-select" : "enable-remote-select")
.Attribute("data-options-url", url)
.Attribute("id", propertyId)
.Attribute("name", propertyName)
.Attribute("data-val", propertyValueString);
的输出。