我正在用 C# 做一些图像处理代码,但我不能使用任何库或类似 GNU 的代码。
UnsharpMask 函数依赖于高斯模糊,而高斯模糊又依赖于傅里叶变换。我为所有这些编写了代码并且一切正常,但长话短说,我需要删除 FFT 函数。有没有办法以另一种可能不需要 FFT 的方式执行锐化掩码?
我正在用 C# 做一些图像处理代码,但我不能使用任何库或类似 GNU 的代码。
UnsharpMask 函数依赖于高斯模糊,而高斯模糊又依赖于傅里叶变换。我为所有这些编写了代码并且一切正常,但长话短说,我需要删除 FFT 函数。有没有办法以另一种可能不需要 FFT 的方式执行锐化掩码?
高斯模糊的傅里叶变换部分只是用高斯核进行卷积的一种有效方法。您可以使用具有适当标准偏差和大小的高斯核的直接卷积来实现(标准偏差的 5-6 倍左右的奇数大小的核大约是正确的)。
请参阅维基百科上的卷积。
我找到了适合我需求的解决方案。
我尝试了几种快速而肮脏的模糊算法,发现Box Blur和Stack Blur都足够了。Stack Blur 比 Box Blur 具有更清晰的模糊效果,并且比 Gaussian 快几倍。所以我可以使用任何一个来代替高斯。
所以现在我可以摆脱所有的 FFT 代码混乱并用更易于管理的东西替换它。这个解决方案可能并不适合所有人,但由于 UnsharpMask 是基于模糊的,我不觉得它过于精确。
顺便说一句,Gimp 的高斯模糊似乎也在避免 FFT。
我相信即使您不能使用任何库或 GNU 的东西,您也可以查看它们的实现并尝试根据您的要求重现类似的代码?
openCV 函数列表。在此处查看函数详细信息,然后在头文件中查看实现详细信息。 http://opencv.willowgarage.com/documentation/genindex.html
此外,如果您对基于 C# 的实现感兴趣,我会建议以下 http://aforgenet.com/framework/