【发布时间】:2016-05-15 15:49:49
【问题描述】:
在关注this的文章之后,我了解到可以通过从原始图像中减去低通图像来获得高通图像。我首先将图像变灰,然后在图像上应用以下滤镜(如文章中所述)。
return new int[,] {{-1, -2, -1},
{-2, 12, -2},
{-1, -2, -1}};
现在只要应用这个过滤器,就可以得到一个检测边缘的图像。
在this文章中,建议在对图像应用滤镜后将其除以16。当我划分时,我得到一个溢出异常并得到一个负值存储在图像中。
我需要以下结果
但我得到了这个结果
我需要这方面的帮助,我怎样才能获得第一张图片。
通常我将结果除以过滤器数组的总和(以防图像模糊)。
这是在图像上应用滤镜蒙版的代码..
public static byte[,] applyFilterMask(byte[,] imageArray, int filterSize, int[,] filterMask, uint width, uint height)
{
byte[,] masked2DImage = new byte[height, width];
for (int row = (filterSize/2) ; row < height - (filterSize/2); row++)
{
for (int col = (filterSize / 2); col < width - (filterSize / 2); col++)
{
int filterResult = 0;
// these nested loops are to apply (generic) filter mask
for (int filterRow = 0; filterRow < filterMask.GetLength(0); filterRow++)
{
for (int filterColumn = 0; filterColumn < filterMask.GetLength(1); filterColumn++)
{
filterResult += imageArray[row - (filterSize/2) + filterRow, col - (filterSize/2) + filterColumn] * filterMask[filterRow, filterColumn];
}
}
filterResult = sumOfFilterMask(filterMask) == 0 ? filterResult : (filterResult / sumOfFilterMask(filterMask));
filterResult = filterResult > 255 ? 255 : (filterResult < 0 ? 0 : filterResult);
masked2DImage[row, col] = Convert.ToByte(filterResult);
}
}
return masked2DImage;
}
【问题讨论】:
标签: c# image-processing