在同时填充数组的同时从阵列中找到两个最大值(差异超过一个)的可能性

时间:2018-02-15 04:50:20

标签: c max

Hough_transform for two lines

我试图在同时填充数组时从数组中找到最大值和最大值+3值。我尝试了以下代码,但这不是合适的算法。

for(x = image_height; x--; ){
    for(y = image_width; y--; ){
        if(*((in_image + x * image_width )+ y)){
            for(theta = -90; theta <= 180; theta++){
                rho = x * mycos(theta) + y * mysin(theta);
                if(rho > 0 && rho < MAX_POSSIBLE_RHO){
                    g_hough_array[(int)rho][(int)theta + 90]++;
                    if(rho == 0) continue;
                    if(max_intensity < g_hough_array[(int)rho][(int)theta + 90]){
                        max_intensity = g_hough_array[(int)rho][(int)theta + 90];
                        *max_theta = theta;
                        *max_rho = rho;
                    }else{
                        if(theta < (*max_theta) + 3 && theta > (*max_theta) - 3) continue;
                        if(max_intensity2 < g_hough_array[(int)rho][(int)theta + 90]){
                            max_intensity2 = g_hough_array[(int)rho][(int)theta + 90];
                            *max_theta2 = theta;
                            *max_rho2 = rho;
                            if(max_intensity2 == max_intensity){
                                float temp = (*max_theta);
                                (*max_theta) = (*max_theta2);
                                (*max_theta2) = temp;
                                temp = (*max_rho);
                                (*max_rho) = (*max_rho2);
                                (*max_rho2) = temp;
                            }
                        }
                    }
                }
            }
        }
    }
}

我在想是否有可能在填充数组的同时找到这两个值? 我想避免额外的循环来找到第二个最大值。

1 个答案:

答案 0 :(得分:0)

建议:

将前两个值捕获为最大值

每当新输入值超过两个捕获值中的最低值时,请用新值替换该最低值。

完成所有操作后,两个捕获的值将是最大值和最大值旁边。

您可以轻松地将其扩展为要求两个值之间的差异至少为3。