我是一个新的OpenCV用户,我正在为大学做一个项目。该程序采取输入图像,模糊它的综合,然后,消除它。当综合模糊图像被反卷积时,边界伪影产生because...well,到目前为止,我还没有实现边界条件。下面是几个例子:您可以看到输入的非模糊图像、综合模糊的图像以及我得到的最终输出:
http://answers.opencv.org/upfiles/13953138566866107.png
根据我正在编写的代码,边界条件必须通过用点扩展函数宽度填充输入图像来实现,并创建一个掩码来指示哪些像素来自捕获区域,哪些像素来自边界区域。
如果我的问题可能很愚蠢,我很抱歉,但是:
1.如何计算点扩展函数的宽度?到目前为止,我使用的是一个简单的3x3盒模糊内核,内核内部有1/9s。3是宽度吗?
2.如果点扩展函数的宽度为3,我是否必须在四面增加三个像素来填充输入图像,还是必须通过“覆盖”因模糊处理而产生的“暗框”来填充输入图像?据我所知,那些“暗框”区域包含原始非模糊图像的平均值,因此不可能在这些区域重建开始的图像进行反褶积,这只会产生和传播伪影。
我想说的是:我是否必须在输入图像的所有四面增加额外的像素,还是必须“覆盖”“暗框”,根据我的理解,它的宽度与点扩展函数相同?
http://answers.opencv.org/upfiles/13953135698274495.png
3.,我必须要为非模糊的输入图像或合成模糊的输入图像垫垫吗?
提前感谢您的帮助!
发布于 2014-03-20 11:25:40
我已经测试了源代码(我已经适应了opencv),它的工作原理非常完美。
对你的问题的回答:
1.是的,在这种情况下,内核大小是3。
2.在链路源上,对图像区域进行卷积处理,使图像每侧的核边减少一半。

图像大小等于你的南方图像(所有绿色和蓝色区域)。
但是你的工作区域比整体图像要小,并且标记为绿色。
相对于源图像,它减少了一半的内核大小(蓝色边框)。
3.不,你没有。
似乎您已经应用了内核大小大于3的盒子过滤器。
以下是我的研究结果:
模糊图像(方框滤波器3x3):

去模糊图像:

您可以在这里下载我的源代码:opencv.zip
当使用大内核时,您将在高频(硬边)上获得振铃。
它可以通过增加正则化系数来减少(它会给图像增加一些“平坦”)。
下面是我从初始源代码获得内核的结果:
模糊图像:

去模糊图像:

尝试获取您的图像参数:
const double reg_weight = 0.0002; // regularizer weight
const double sigma = 9.0; // mutation standard deviation
const double reset_prob = 0.005f; // russian roulette chain reset probability
const int num_iterations = 400; // number of 'iterations', mostly for output
double ed = 0.025; // starting deposition energy关于私营部门基金:
const int psf_cnt = 9;
const double psf_v[] = { 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0 };
const int psf_x[] = { -4, -3, -2, -1, 0, 1, 2, 3, 4 };
const int psf_y[] = { -4, -3, -2, -1, 0, 1, 2, 3, 4 };我得到的结果如下:

https://stackoverflow.com/questions/22511433
复制相似问题