我试图在同时填充数组时从数组中找到最大值和最大值+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;
}
}
}
}
}
}
}
}
我在想是否有可能在填充数组的同时找到这两个值? 我想避免额外的循环来找到第二个最大值。
答案 0 :(得分:0)
建议:
将前两个值捕获为最大值
每当新输入值超过两个捕获值中的最低值时,请用新值替换该最低值。
完成所有操作后,两个捕获的值将是最大值和最大值旁边。
您可以轻松地将其扩展为要求两个值之间的差异至少为3。