人脸检测算法

public unsafe static void GenerateProposal(int inpHeight, int inpWidth, int reg_max, int num_class, float score_threshold, int feat_h, int feat_w, Mat output, List<Rect> position_boxes, List<float> confidences, List<List<Point>> landmarks, int imgh, int imgw, float ratioh, float ratiow, int padh, int padw)

{

int num = (int)Math.Ceiling((double)(inpHeight / feat_h));

int num2 = feat_h * feat_w;

float* ptr = (float*)(void*)output.DataStart;

float* ptr2 = ptr + num2 * reg_max * 4;

float* ptr3 = ptr + num2 * (reg_max * 4 + num_class);

for (int i = 0; i < feat_h; i++)

{

for (int j = 0; j < feat_w; j++)

{

int num3 = -1;

float num4 = -10000f;

int num5 = i * feat_w + j;

for (int k = 0; k < num_class; k++)

{

float num6 = ptr2[k * num2 + num5];

if (num6 > num4)

{

num4 = num6;

num3 = k;

}

}

float num7 = sigmoid_x(num4);

if (!(num7 > score_threshold))

{

continue;

}

float[] array = new float[4];

float[] x = new float[reg_max];

float[] y = new float[reg_max];

for (int l = 0; l < 4; l++)

{

for (int m = 0; m < reg_max; m++)

{

x[m] = ptr[(l * reg_max + m) * num2 + num5];

}

softmax_(ref x, ref y, reg_max);

float num8 = 0f;

for (int n = 0; n < reg_max; n++)

{

num8 += (float)n * y[n];

}

array[l] = num8 * (float)num;

}

float num9 = ((float)j + 0.5f) * (float)num;

float num10 = ((float)i + 0.5f) * (float)num;

float num11 = Math.Max((num9 - array[0] - (float)padw) * ratiow, 0f);

float num12 = Math.Max((num10 - array[1] - (float)padh) * ratioh, 0f);

float num13 = Math.Min((num9 + array[2] - (float)padw) * ratiow, imgw - 1);

float num14 = Math.Min((num10 + array[3] - (float)padh) * ratioh, imgh - 1);

Rect item = new Rect((int)num11, (int)num12, (int)(num13 - num11), (int)(num14 - num12));

position_boxes.Add(item);

confidences.Add(num7);

List<Point> list = new List<Point>();

for (int num15 = 0; num15 < 5; num15++)

{

float num16 = ((ptr3[num15 * 3 * num2 + num5] * 2f + (float)j) * (float)num - (float)padw) * ratiow;

float num17 = ((ptr3[(num15 * 3 + 1) * num2 + num5] * 2f + (float)i) * (float)num - (float)padh) * ratioh;

list.Add(new Point((int)num16, (int)num17));

}

landmarks.Add(list);

}

}

}

相关推荐
6Hzlia7 小时前
【Hot 100 刷题计划】 LeetCode 739. 每日温度 | C++ 逆序单调栈
c++·算法·leetcode
良木生香7 小时前
【C++初阶】:STL——String从入门到应用完全指南(1)
c语言·开发语言·数据结构·c++·算法
XWalnut7 小时前
LeetCode刷题 day16
数据结构·算法·leetcode·链表·动态规划
foundbug9999 小时前
基于混合整数规划的电池容量优化 - MATLAB实现
数据结构·算法·matlab
memcpy010 小时前
LeetCode 2452. 距离字典两次编辑以内的单词【暴力;字典树】中等
算法·leetcode·职场和发展
王老师青少年编程11 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【排序贪心】:魔法
c++·算法·贪心·csp·信奥赛·排序贪心·魔法
wearegogog12311 小时前
基于和差波束法的单脉冲测角MATLAB实现
人工智能·算法·matlab
AI科技星11 小时前
灵魂商数(SQ) · 全域数学统一定义【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
晓觉儿11 小时前
【GPLT】2026年第十一届团队程序设计天梯赛赛后题解(已写2h,存档中)
数据结构·c++·算法·深度优先·图论