【问题标题】:How to normalize an image using Octave?如何使用 Octave 标准化图像?
【发布时间】:2012-12-05 14:54:36
【问题描述】:

在他们描述Viola-Jones object detection framework(Viola 和 Jones 的鲁棒实时人脸检测)的论文中说:

所有用于训练的示例子窗口都进行了方差归一化,以尽量减少不同光照条件的影响。

我的问题是“如何在 Octave 中实现图像标准化?”

我不是在寻找 Viola & Jones 使用的特定实现,而是在寻找产生几乎相同输出的类似实现。我一直在关注很多 haar-training 教程(试图检测一只手),但还不能输出一个好的检测器(xml)。

我已尝试联系作者,但仍未得到回复。

【问题讨论】:

    标签: algorithm image-processing machine-learning octave face-detection


    【解决方案1】:

    我已经在 this thread 的一般指南中回答了如何操作。

    这里是如何在octave中做方法1(归一化到标准正态偏差)(演示随机矩阵A,当然可以应用于任何矩阵,就是图片的表示方式):

    >>A = rand(5,5)
    A =
    
       0.078558   0.856690   0.077673   0.038482   0.125593
       0.272183   0.091885   0.495691   0.313981   0.198931
       0.287203   0.779104   0.301254   0.118286   0.252514
       0.508187   0.893055   0.797877   0.668184   0.402121
       0.319055   0.245784   0.324384   0.519099   0.352954
    
    >>s = std(A(:))
    s =  0.25628
    >>u = mean(A(:))
    u =  0.37275
    >>A_norn = (A - u) / s
    A_norn =
    
      -1.147939   1.888350  -1.151395  -1.304320  -0.964411
      -0.392411  -1.095939   0.479722  -0.229316  -0.678241
      -0.333804   1.585607  -0.278976  -0.992922  -0.469159
       0.528481   2.030247   1.658861   1.152795   0.114610
      -0.209517  -0.495419  -0.188723   0.571062  -0.077241
    

    在上面你使用:

    • 获取矩阵的标准差:s = std(A(:))
    • 获取矩阵的平均值:u = mean(A(:))
    • 然后按照公式A'[i][j] = (A[i][j] - u)/s 使用 矢量化版本:A_norm = (A - u) / s

    用向量归一化对其进行归一化也很简单:

    >>abs = sqrt((A(:))' * (A(:)))
    abs =  2.2472
    >>A_norm = A / abs
    A_norm =
    
       0.034959   0.381229   0.034565   0.017124   0.055889
       0.121122   0.040889   0.220583   0.139722   0.088525
       0.127806   0.346703   0.134059   0.052637   0.112369
       0.226144   0.397411   0.355057   0.297343   0.178945
       0.141980   0.109375   0.144351   0.231000   0.157065
    

    在上面:

    • abs是向量的绝对值(它的长度),用向量化乘法计算(A(:)' * A(:)实际上是sum(A[i][j]^2)
    • 然后我们使用它对向量进行归一化,使其长度为 1。

    【讨论】:

    • 嗨!我能够在 Octave 中做到这一点。输出是一个值为 0 到 2 的矩阵(取决于图片的大小,在我的例子中是 20 x 20)。但是当我尝试“使用 >imwrite(norm, "output.pgm")” 保存它时,图片全是黑色的。有什么想法吗?提前致谢!
    • @KojiIkehara:预计全黑,范围 [0,2] 相当小(数字很小),并且可见的多样性非常低。这种处理不会使图像对人类“更好”,而是让算法更好地分析它。
    • 嗨!谢谢!我还有一个问题,你知道他们是否使用这些“全黑图片”作为训练的原始数据?还是算法会处理它?
    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 2021-07-03
    • 1970-01-01
    • 2012-11-29
    • 2013-05-17
    • 2022-01-12
    • 1970-01-01
    • 2017-07-05
    相关资源
    最近更新 更多