utils.hh
上传用户:l56789
上传日期:2022-02-25
资源大小:2422k
文件大小:5k
源码类别:

图形图像处理

开发平台:

Matlab

  1. //-----------------------------------------------------------------------------
  2. // utils.hh
  3. //-----------------------------------------------------------------------------
  4. //
  5. // Collection of utility functions
  6. //
  7. //-----------------------------------------------------------------------------
  8. #ifndef UTILS_H
  9. #define UTILS_H
  10. #include <math.h>
  11. #include <vector>
  12. using std::vector;
  13. // x = [0:255] / 80.0;
  14. // gtab = 1/sqrt(2*pi) * exp(-0.5 * x .^2);
  15. const double gtab[] = {
  16.     3.9894e-01, 3.9891e-01, 3.9882e-01, 3.9866e-01, 3.9844e-01, 3.9816e-01, 
  17.     3.9782e-01, 3.9742e-01, 3.9695e-01, 3.9643e-01, 3.9584e-01, 3.9519e-01,
  18.     3.9448e-01, 3.9371e-01, 3.9288e-01, 3.9199e-01, 3.9104e-01, 3.9004e-01,
  19.     3.8897e-01, 3.8785e-01, 3.8667e-01, 3.8543e-01, 3.8414e-01, 3.8279e-01,
  20.     3.8139e-01, 3.7993e-01, 3.7842e-01, 3.7686e-01, 3.7524e-01, 3.7357e-01,
  21.     3.7186e-01, 3.7009e-01, 3.6827e-01, 3.6640e-01, 3.6449e-01, 3.6253e-01,
  22.     3.6053e-01, 3.5848e-01, 3.5638e-01, 3.5424e-01, 3.5207e-01, 3.4984e-01,
  23.     3.4758e-01, 3.4528e-01, 3.4294e-01, 3.4057e-01, 3.3815e-01, 3.3571e-01,
  24.     3.3322e-01, 3.3071e-01, 3.2816e-01, 3.2558e-01, 3.2297e-01, 3.2033e-01,
  25.     3.1767e-01, 3.1497e-01, 3.1225e-01, 3.0951e-01, 3.0674e-01, 3.0395e-01,
  26.     3.0114e-01, 2.9830e-01, 2.9545e-01, 2.9258e-01, 2.8969e-01, 2.8679e-01,
  27.     2.8387e-01, 2.8093e-01, 2.7798e-01, 2.7503e-01, 2.7205e-01, 2.6907e-01,
  28.     2.6609e-01, 2.6309e-01, 2.6008e-01, 2.5707e-01, 2.5406e-01, 2.5104e-01,
  29.     2.4802e-01, 2.4500e-01, 2.4197e-01, 2.3895e-01, 2.3592e-01, 2.3290e-01,
  30.     2.2988e-01, 2.2687e-01, 2.2386e-01, 2.2085e-01, 2.1785e-01, 2.1486e-01,
  31.     2.1188e-01, 2.0890e-01, 2.0594e-01, 2.0298e-01, 2.0004e-01, 1.9711e-01,
  32.     1.9419e-01, 1.9128e-01, 1.8839e-01, 1.8551e-01, 1.8265e-01, 1.7980e-01,
  33.     1.7697e-01, 1.7416e-01, 1.7137e-01, 1.6859e-01, 1.6584e-01, 1.6310e-01,
  34.     1.6038e-01, 1.5769e-01, 1.5501e-01, 1.5236e-01, 1.4973e-01, 1.4712e-01,
  35.     1.4453e-01, 1.4197e-01, 1.3943e-01, 1.3692e-01, 1.3442e-01, 1.3196e-01,
  36.     1.2952e-01, 1.2710e-01, 1.2471e-01, 1.2235e-01, 1.2001e-01, 1.1770e-01,
  37.     1.1541e-01, 1.1315e-01, 1.1092e-01, 1.0872e-01, 1.0654e-01, 1.0439e-01,
  38.     1.0226e-01, 1.0017e-01, 9.8102e-02, 9.6062e-02, 9.4049e-02, 9.2064e-02,
  39.     9.0108e-02, 8.8179e-02, 8.6277e-02, 8.4404e-02, 8.2558e-02, 8.0740e-02,
  40.     7.8950e-02, 7.7188e-02, 7.5453e-02, 7.3745e-02, 7.2065e-02, 7.0412e-02,
  41.     6.8786e-02, 6.7188e-02, 6.5616e-02, 6.4071e-02, 6.2552e-02, 6.1060e-02,
  42.     5.9595e-02, 5.8155e-02, 5.6741e-02, 5.5353e-02, 5.3991e-02, 5.2654e-02,
  43.     5.1342e-02, 5.0055e-02, 4.8792e-02, 4.7554e-02, 4.6340e-02, 4.5150e-02,
  44.     4.3984e-02, 4.2841e-02, 4.1721e-02, 4.0624e-02, 3.9550e-02, 3.8498e-02,
  45.     3.7469e-02, 3.6461e-02, 3.5475e-02, 3.4510e-02, 3.3566e-02, 3.2642e-02,
  46.     3.1740e-02, 3.0857e-02, 2.9994e-02, 2.9151e-02, 2.8327e-02, 2.7522e-02,
  47.     2.6736e-02, 2.5968e-02, 2.5218e-02, 2.4486e-02, 2.3772e-02, 2.3075e-02,
  48.     2.2395e-02, 2.1731e-02, 2.1084e-02, 2.0453e-02, 1.9837e-02, 1.9238e-02,
  49.     1.8653e-02, 1.8083e-02, 1.7528e-02, 1.6988e-02, 1.6461e-02, 1.5948e-02,
  50.     1.5449e-02, 1.4963e-02, 1.4491e-02, 1.4031e-02, 1.3583e-02, 1.3148e-02,
  51.     1.2724e-02, 1.2312e-02, 1.1912e-02, 1.1523e-02, 1.1145e-02, 1.0778e-02,
  52.     1.0421e-02, 1.0074e-02, 9.7377e-03, 9.4109e-03, 9.0936e-03, 8.7856e-03,
  53.     8.4867e-03, 8.1968e-03, 7.9155e-03, 7.6426e-03, 7.3780e-03, 7.1215e-03,
  54.     6.8728e-03, 6.6317e-03, 6.3981e-03, 6.1718e-03, 5.9525e-03, 5.7402e-03,
  55.     5.5345e-03, 5.3354e-03, 5.1426e-03, 4.9561e-03, 4.7755e-03, 4.6008e-03,
  56.     4.4318e-03, 4.2684e-03, 4.1103e-03, 3.9575e-03, 3.8098e-03, 3.6670e-03,
  57.     3.5290e-03, 3.3956e-03, 3.2668e-03, 3.1424e-03, 3.0223e-03, 2.9063e-03,
  58.     2.7943e-03, 2.6862e-03, 2.5818e-03, 2.4812e-03
  59. };
  60. inline double max(double x, double y) { return (x > y) ? x : y; }
  61. inline double min(double x, double y) { return (x < y) ? x : y; }
  62. #define GD 0.39894228040143 // 1/sqrt(2*pi)
  63. #define MIN_GAU 1.0e-6 // smoothed Gaussian
  64. #ifdef FAST_GAUSS
  65. inline double compute_g(double w, double m, double s) // Lookup table
  66. {
  67.     if (w > m)
  68. return (gtab[(int) min(255, 80*(w-m)/s)] / s);
  69.     else
  70. return (gtab[(int) min(255, 80*(m-w)/s)] / s);
  71. }
  72. #else
  73. inline double compute_g(double w, double m, double s)  
  74. {
  75.     double x = (w - m) / s;
  76.     return max(GD * exp(-0.5 * x * x) / s, MIN_GAU);
  77. }
  78. #endif
  79. // Approximate Psi(x), the cumunative of normal distribution N(0,1):
  80. // Psi(x) = 1/sqrt(2*pi) * int_{-infty}^x e^{-t^2/2}, x >= 0
  81. inline double Psi(double x)
  82. {
  83.     double p = x * (1.5976 + 0.070566 * x * x);
  84.     return (1.0 / (1.0 + exp(-p)));
  85. }
  86. int ipow(int n, int j); // integer power
  87. double ran1(int& idum); // uniform random [0,1)
  88. double rangas(int& idum); // standard Gaussian
  89. void ranprobs(vector<double>& vprobs, int& idum);// probs. add to one
  90. int ranind(const vector<double>& vprobs, int& idum); // ret. random index
  91. #endif //UTILS_H