小编Heg*_*ine的帖子

互斥选项组

我熟悉boost的程序选项实用程序,我想知道是否有一种定义互斥选项组的方法.即,我的程序有不同的流程:

program --first --opt1 --opt2 ...
program --second --opt3 --opt4 ...

所以,我对不同流程的选择是相互排斥的.有没有办法定义互斥的选项组?

当然下面代码会这样做:

 /* Function used to check that 'opt1' and 'opt2' are not specified
   at the same time. */
void conflicting_options(const variables_map& vm, 
                         const char* opt1, const char* opt2)
{
    if (vm.count(opt1) && !vm[opt1].defaulted() 
        && vm.count(opt2) && !vm[opt2].defaulted())
        throw logic_error(string("Conflicting options '") 
                          + opt1 + "' and '" + opt2 + "'.");
}
int main(int ac, char* av[])
{
    try {
        // Declare three groups of options.
        options_description first("First …
Run Code Online (Sandbox Code Playgroud)

c++ boost-program-options

5
推荐指数
0
解决办法
429
查看次数

使用快速傅立叶变换模糊矩阵

我想模糊矩阵中的值,以便在相邻元素中我们不会有明显的过渡.

从维基百科页面Gaussian Blur我发现了一些关于高斯模糊的信息.我用最简单的算法尝试过,因此运行时间太长.坦率地说,我不确定我的实现是否正确,因为在边界瓦片上仍然存在明显的过渡.

我注意到这种模糊可以通过离散傅立叶变换来完成,这种变换要快得多,但我无法弄明白.

所以,我们的想法是,我们可以使用以下公式获得模糊矩阵:

blurredMatrix = IFFT[FFT[initialMatrix]FFT[weightingFunction]]
Run Code Online (Sandbox Code Playgroud)

其中FFT/IFFT是快速傅里叶变换/逆快速傅立叶变换.

目前我正在尝试对Wolfram Mathematica进行一些测试,以确保这种傅里叶变换的近似是正确的.

我正在使用GaussianMatrixweightingFunction.

我需要2d模糊,所以我创建了如下的高斯矩阵:

假设我们的初始矩阵具有nxn大小,其中n = 2k + 1

G = Chop[GaussianMatrix[k] GaussianMatrix[k], 10^6]
Run Code Online (Sandbox Code Playgroud)

然后,我尝试创建blurMatrix,如下所示:

blurredMatrix = Chop[FourierDCT[(FourierDCT[G]) (FourierDCT[initialMatrix]), 3], 10^-6]
Run Code Online (Sandbox Code Playgroud)

但结果我得到了零.

似乎我做错了.

另外,我尝试了另一种方法:

f[xi_, yj_] := 1/(2 \[Pi] \[Sigma]^2) Exp[-(((xi^2) + (yj^2) )/(2 \[Sigma]^2))];<br/>
[Sigma] = 3;<br/>
G = Chop[N[Table[f[i, j], {i, 1, 100}, {j, 1, 100}]]]; <br/>
Tavg = Chop[ 1000 InverseFourier[(Fourier[G]) (Fourier[T]) ], 10^-6]; <br/>
Run Code Online (Sandbox Code Playgroud)

使用这种方法,图像看起来很好(图像模糊),但blurMatrix和initialMatrix的值之间存在很大差异.

似乎有一些正常化或其他问题.

我需要用C/C++编写代码,C中有一个库FFTW库,它支持离散傅里叶变换.

如果这是一种错误的模糊方式,请告诉我,还有其他可能做我想做的事情.

c++ wolfram-mathematica gaussian convolution fftw

2
推荐指数
1
解决办法
439
查看次数