提问人:speca 提问时间:10/19/2023 更新时间:10/19/2023 访问量:59
ArrayFire:为什么卷积后反卷积不返回原始图像(甚至不接近)
ArrayFire: Why doesn't convolution followed by deconvolution return the original image (not even close)
问:
我正在尝试使用 C++ 中的 ArrayFire 为图像去模糊应用程序执行卷积和反卷积。出于测试目的,我有一个 5x5 映像和一个 3x3 内核。我使用 af::convolve2 对图像进行卷积,然后使用 af::iterativeDeconv 对其进行反卷积。但是,去卷积的值与原始图像不匹配。
有趣的是,与 Richardson-Lucy 算法相比,使用 Landweber 反卷积算法时,不匹配更大。
这是我的代码:
// Create a simple 5x5 input image
float h_image[25] = {
1, 1, 1, 1, 1,
1, 2, 2, 2, 1,
1, 2, 3, 2, 1,
1, 2, 2, 2, 1,
1, 1, 1, 1, 1,
};
af::array image(5, 5, h_image);
// Create a simple 3x3 kernel (normalized such that sum == 1)for convolution
float h_kernel[9] = {
0.111, 0.111, 0.111,
0.111, 0.111, 0.111,
0.111, 0.111, 0.111,
};
af::array kernel(3, 3, h_kernel);
// Perform convolution
af::array convolved = af::convolve2(image, kernel);
// Perform deconvolution
float relaxation_factor = 0.64;
int num_iterations = 128;
af::array deconvolved_richardson_lucy = af::iterativeDeconv(convolved, kernel, num_iterations, relaxation_factor, AF_ITERATIVE_DECONV_RICHARDSONLUCY);
af::array deconvolved_landweber = af::iterativeDeconv(convolved, kernel, num_iterations, relaxation_factor, AF_ITERATIVE_DECONV_LANDWEBER);
// Output results
af::print("Original Image", image);
af::print("Convolved Image", convolved);
af::print("Deconvolved Image - Richardson Lucy", deconvolved_richardson_lucy);
af::print("Deconvolved Image - Landweber", deconvolved_landweber);
输出为:
Original Image
[5 5 1 1]
1.0000 1.0000 1.0000 1.0000 1.0000
1.0000 2.0000 2.0000 2.0000 1.0000
1.0000 2.0000 3.0000 2.0000 1.0000
1.0000 2.0000 2.0000 2.0000 1.0000
1.0000 1.0000 1.0000 1.0000 1.0000
Convolved Image
[5 5 1 1]
0.5550 0.8880 0.9990 0.8880 0.5550
0.8880 1.5540 1.7760 1.5540 0.8880
0.9990 1.7760 2.1090 1.7760 0.9990
0.8880 1.5540 1.7760 1.5540 0.8880
0.5550 0.8880 0.9990 0.8880 0.5550
Deconvolved Image - Richardson Lucy
[5 5 1 1]
0.3774 0.5695 1.0053 0.5695 0.3774
0.5695 1.2211 2.2630 1.2211 0.5695
1.0053 2.2630 4.7015 2.2630 1.0053
0.5695 1.2211 2.2630 1.2211 0.5695
0.3774 0.5695 1.0053 0.5695 0.3774
Deconvolved Image - Landweber
[5 5 1 1]
23.2821 32.3862 71.3124 32.3862 23.2820
32.3862 80.7867 151.3048 80.7867 32.3862
71.3124 151.3049 276.6479 151.3048 71.3124
32.3862 80.7867 151.3048 80.7867 32.3862
23.2821 32.3862 71.3124 32.3862 23.2820
为什么反卷积图像中的值与原始图像不匹配? 为什么理查森-露西和兰德韦伯之间会有如此巨大的差异? 显然,我一定错过了什么。任何正确方向的指导将不胜感激。
我已经为反卷积算法试验了各种内核和不同次数的迭代。我的期望是,随着迭代次数的增加(最多达到一定次数的迭代),去卷积的图像会更接近原始图像,但事实并非如此。
答: 暂无答案
评论