标签: haar-wavelet

Haar Cascades与人脸检测中的LBP级联

我一直在OpenCV(开源计算机视觉库)中进行面部检测实验,发现可以使用Haar级联来检测面部,因为其中有几个提供了OpenCV.但是,我注意到还有几个LBP级联.根据OpenCV人脸检测文档,经过一些研究,我发现LBP代表局部二进制模式,也可以用于人脸检测.

我想知道的是哪个更好?哪一个表现得更快,哪一个更准确?似乎LBP表现得更快,但我也不是100%肯定.谢谢.

opencv cascade face-detection haar-wavelet viola-jones

54
推荐指数
5
解决办法
5万
查看次数

openCV中的小波变换

有人试图在opencv或C++中实现DWT吗?我看到关于这个主题的老帖子,我发现它们对我没用,因为我需要一个近似系数和细节作为小波变换的结果.

我试图将这个(http://wavelet2d.sourceforge.net/)添加到我的项目中,但它没有按计划运行.

这很简单,因为参数我需要近似系数和细节:

void haar1(float *vec, int n, int w)
{
int i=0;
float *vecp = new float[n];
for(i=0;i<n;i++)
    vecp[i] = 0;

    w/=2;
    for(i=0;i<w;i++)
    {
        vecp[i] = (vec[2*i] + vec[2*i+1])/sqrt(2.0);
        vecp[i+w] = (vec[2*i] - vec[2*i+1])/sqrt(2.0);
    }

    for(i=0;i<(w*2);i++)
            vec[i] = vecp[i];

        delete [] vecp;
}
void haar2(float **matrix, int rows, int cols)
{
    float *temp_row = new float[cols];
    float *temp_col = new float[rows];

    int i=0,j=0;
    int w = cols, h=rows;
while(w>1 || h>1)
{
    if(w>1)
    {
        for(i=0;i<h;i++)
        {
            for(j=0;j<cols;j++) …
Run Code Online (Sandbox Code Playgroud)

c++ opencv dwt haar-wavelet

18
推荐指数
2
解决办法
3万
查看次数

如何使用Open CV检测哈欠

我正在开发一个iOS应用程序,需要检测用户何时打哈欠.

我所做的是包括Open CV并使用haar级联找到面孔,然后在面部内找到嘴(也使用haarcascade).

我遇到的麻烦是,我相信能够很容易地发现哈欠像做某事(face.y - mouth.y)<something = yawn.

但我所遇到的问题是面部和嘴部的面积是"不稳定的",我的意思是每次循环运行时,面部和嘴部的X和Y值都是(显然)不一样.

我可以使用任何"张开嘴"的haar级联,或者我怎么知道用户何时张开嘴?

opencv haar-wavelet ios

10
推荐指数
1
解决办法
6158
查看次数

如何使用Haar小波检测图像上的LINES?

所以我有一个像这样的图像:

 CG生成的浴室

我想得到这样的东西(我没有绘制我想要的所有行,但我希望你能得到我的想法):

 黑色和白色CG生成的浴室与瓷砖之间的一些红线

我想使用SURF((Speeded Up Robust Features)是一个强大的图像描述符,首先由Herbert Bay等人在2006年提出)或基于2D Haar小波响应之和的东西,并有效地使用积分图像找到图像上的所有直线.我想得到相对于图片像素坐标线的起点和终点.

所以在这张照片上找到瓷砖和顶部的那两条黑线之间的所有线条.

是否有任何此类代码示例(具有行搜索功能)从哪个开始?

我喜欢C和C++,但任何其他可读的代码都可能适用于我=)

algorithm image-processing haar-wavelet straight-line-detection

7
推荐指数
1
解决办法
3855
查看次数

旋转不变检测器的最佳解决方案是什么?

我想基于级联分类器创建一个物体探测器,唯一的问题是LBP和Haar特征不是旋转不变的.我想到的第一件事就是以不同的角度旋转训练样本,但我怀疑得到的分类器会有很好的质量,而且,对象可能有拉长的比例.有许多旋转不变的探测器,例如,iPhone可以在任何方向实时识别面部,所以我想知道它们是如何实现这一目标的?我更喜欢使用OpenCV.

opencv image-processing object-detection computer-vision haar-wavelet

7
推荐指数
2
解决办法
8666
查看次数

C/C++小波库,非GPL

理想情况下,我想要找到的是一个简单,直接的多个小波类别接口,如GSL,但它有一个许可证,允许我在专有软件中使用它.这里最佳答案列出了10个小波库,但是除了一个之外的所有库都是根据GPL许可的,并且那个看起来不是重量级的小波库,小波计算包含在更大的图像处理功能中(我不做).无论如何,我想有更多的选择.

我也发现看起来很酷,但它假设有一个具有cuda功能的GPU,我无法想象.

c c++ algorithm wavelet haar-wavelet

7
推荐指数
1
解决办法
1119
查看次数

当人微笑时如何找出whitePixelValue?

使用CvRect我能够检测面部坐标

detectFace(IplImage * pImg, CvHaarClassifierCascade * pCascade, CvMemStorage * pStorage)
Run Code Online (Sandbox Code Playgroud)

但我的问题是当人微笑时如何找出whitePixelValue?

什么微笑偏移是合适的?150值是否准确?

微笑haarcascade根本不工作.需要使用白色像素的逻辑做一些事情

请帮忙!!!

更新:我认为我的赏金会浪费..没有得到专家对此线程的回应.我在寻找算法:(

iphone opencv pixel face-detection haar-wavelet

6
推荐指数
1
解决办法
749
查看次数

haar培训OpenCV断言失败

我正在尝试使用3340正面图像和1224个负面图像为OpenCV中的行人训练一个类似于haar的分类器.(在.txt文件中我保留负图像名称,即负数(1).bmp,并在txt文件中保留正数,即图片(1).bmp 1 0 0 64 128.实际上正面的例子已经是裁剪图像行人所以我只需要为每个图像指定一个正样本.

在培训过程中的某个时刻,它停止并说:

"Opencv错误:断言失败(elements_read == 1)在未知函数中,文件c:\ path\cvhaartraining.cpp,第1858行"

关于是什么导致这个的任何想法?

c++ opencv image-processing computer-vision haar-wavelet

6
推荐指数
1
解决办法
1万
查看次数

如何将DWT用于LSB替代隐写术

在隐写术中,最低有效位(LSB)替换方法将秘密位嵌入来自覆盖介质的位的位置,例如图像像素.在一些方法中,采用图像的离散小波变换(DWT)并且将秘密比特嵌入DWT系数中,之后使用逆变换来重建隐秘图像.

但是,DWT产生浮点系数,对于LSB替换方法,需要整数值.我读过的大多数论文都使用2D Haar Wavelet,但他们的方法并不清楚.我已经看到变换是根据低通和高通滤波器(浮点变换)定义的,或者是取对值的和与差,或者平均值和平均值之差等.

更明确地,无论是正向变换还是反向变换(但不一定取决于所使用的公式),最终将出现浮点数.我不能将它们用于系数,因为替换不起作用,我不能将它们用于重建的像素,因为图像需要整数值来存储.

例如,让我们考虑一对像素,AB作为一维数组.低频系数由和,即s = A + B高频系数和差值定义,即d = A - B.然后我们可以用B = (s - d) / 2和重建原始像素A = s - B.然而,在任何与系数混合的位之后,s - d可能不再是偶数,并且浮点值将出现用于重建的像素.

对于2D情况,1D变换分别应用于行和列,因此最终会在某处出现4除法.这可能导致具有浮动余数.00,.25,.50和.75的值.我只遇到过一篇解决这个问题的论文.其余的方法都很模糊,我很难复制它们.然而,DWT已经广泛用于图像隐写术.

我的问题是,既然我读过的一些文献没有启发,那怎么可能呢?如何使用引入浮点值的变换,但整个隐写方法需要整数?

steganography dwt haar-wavelet wavelet-transform

6
推荐指数
1
解决办法
1867
查看次数

haar分类器中cascade.xml的说明

如果有人能够完全解释cascade.xml中的数字/值,那将是最好的.示例:

<!-- stage 0 -->
<_>
  <maxWeakCount>3</maxWeakCount>
  <stageThreshold>-8.8384145498275757e-001</stageThreshold>
  <weakClassifiers>
    <_>
      <internalNodes>
        0 -1 66 5.1593100652098656e-003</internalNodes>
      <leafValues>
        -8.0555558204650879e-001 8.0694979429244995e-001</leafValues></_>
    <_>
      <internalNodes>
        0 -1 108 1.5044789761304855e-002</internalNodes>
      <leafValues>
        -6.2940740585327148e-001 7.5122624635696411e-001</leafValues></_>
    <_>
      <internalNodes>
        0 -1 99 -4.7172707127174363e-005</internalNodes>
      <leafValues>
        5.5112153291702271e-001 -8.6111217737197876e-001</leafValues></_></weakClassifiers></_>
Run Code Online (Sandbox Code Playgroud)

这些价值观的含义是什么?

      <internalNodes>
        0 -1 99 -4.7172707127174363e-005</internalNodes>
Run Code Online (Sandbox Code Playgroud)

另一个问题是,该程序如何知道特定阶段使用哪个功能?据我所知,功能的形式如下

<_>
  <rects>
    <_>
      21 6 3 5 -1.</_>
    <_>
      22 6 1 5 3.</_></rects>
  <tilted>0</tilted></_>
Run Code Online (Sandbox Code Playgroud)

因此它是两个矩形的坐标,形成如下所示:

=-=    = Black colored rectangle
=-=    - White colored rectangle
=-=
=-=
=-=
Run Code Online (Sandbox Code Playgroud)

什么是值-1.和3意味着什么?我知道它的重量但它是如何用于计算功能的?

摘要

  1. 里面的价值观是什么意思<internalNodes>
  2. 该功能如何计算?如何<rects>使用重量? …

opencv classification adaboost haar-wavelet

5
推荐指数
1
解决办法
1707
查看次数

Haar级联的图像尺寸考虑

OpenCV Haar级联分类器似乎使用24x24个面部图像作为其正面训练数据.我有两个问题:

  • 除了大型训练图像需要更多处理这一事实外,选择训练图像大小的考虑因素是什么?
  • 对于非方形图像,有些人选择将一维保持在24px,并根据需要扩展另一维(比如100-200px).这是正确的策略吗?
  • 如何决定训练图像的大小(这是问题1的变体)

opencv image-processing computer-vision haar-wavelet

5
推荐指数
1
解决办法
2304
查看次数

CUDA中的HAAR小波变换

我试图在CUDA中为一维数组实现HAAR小波变换.

算法

我在输入数组中有8个索引

在这种情况下,if(x_index>=o_width/2 || y_index>=o_height/2)我将有4个线程,应该是0,2,4,6,我计划在输入中使用每个指针处理handletwo索引.

我计算avg.EG:如果我的线程id是'0' - 然后avg是(输入[0] +输入[1])/ 2然后同时我得到将输入[0]的差异 - avg等等其余的线程.

现在重要的是输出的位置.我为输出创建了一个单独的thread_id,因为使用索引0,2,4,6会在将输出放置在正确的索引中时产生困难.

我的avgs应该放在前4个索引中,即输出的0,1,2,3和o_thread_id应该是0,1,2,3.类似地,为了将差异置于4,5,6,7,我将增加了0,1,2,3,其中"4"如代码所示

问题

我的输出全部归零!无论我改变什么,我都会得到这个.

__global__ void cal_haar(int input[],float output [],int i_widthstep,int o_widthstep,int o_width,int o_height)
{

    int x_index=blockIdx.x*blockDim.x+threadIdx.x;
    int y_index=blockIdx.y*blockDim.y+threadIdx.y;

    if(x_index>=o_width/2 || y_index>=o_height/2) return;

    int i_thread_id=y_index*i_widthstep+(2*x_index);
    int o_thread_id=y_index*o_widthstep+x_index;

    float avg=(input[i_thread_id]+input[i_thread_id+1])/2;
    float diff=input[i_thread_id]-avg;
    output[o_thread_id]=avg;
    output[o_thread_id+4]=diff;

}

void haar(int input[],float output [],int i_widthstep,int o_widthstep,int o_width,int o_height)
{

    int * d_input;
    float * d_output;

    cudaMalloc(&d_input,i_widthstep*o_height);
    cudaMalloc(&d_output,o_widthstep*o_height);

    cudaMemcpy(d_input,input,i_widthstep*o_height,cudaMemcpyHostToDevice);

    dim3 blocksize(16,16);
    dim3 gridsize;
    gridsize.x=(o_width+blocksize.x-1)/blocksize.x;
    gridsize.y=(o_height+blocksize.y-1)/blocksize.y;

    cal_haar<<<gridsize,blocksize>>>(d_input,d_output,i_widthstep,o_widthstep,o_width,o_height);


    cudaMemcpy(output,d_output,o_widthstep*o_height,cudaMemcpyDeviceToHost);

    cudaFree(d_input);
    cudaFree(d_output);

} …
Run Code Online (Sandbox Code Playgroud)

cuda haar-wavelet

4
推荐指数
1
解决办法
1602
查看次数