377 float blob_o_score[4] = {0.0f, 0.0f, 0.0f, 0.0f};
378 float total_blob_o_score = 0.0f;
380 for (
int i = 0; i < 4; ++i) {
381 BLOB_CHOICE_IT choice_it(scores + i);
382 if (!choice_it.empty()) {
384 if (allowed_scripts_ != NULL && !allowed_scripts_->
empty()) {
386 for (choice_it.mark_cycle_pt(); !choice_it.cycled_list() &&
387 choice == NULL; choice_it.forward()) {
388 int choice_script = choice_it.data()->
script_id();
390 for (s = 0; s < allowed_scripts_->
size(); ++s) {
391 if ((*allowed_scripts_)[s] == choice_script) {
392 choice = choice_it.data();
398 choice = choice_it.data();
400 if (choice != NULL) {
403 blob_o_score[i] = 1 + 0.05 * choice->
certainty();
404 total_blob_o_score += blob_o_score[i];
408 if (total_blob_o_score == 0.0)
return false;
411 float worst_score = 0.0f;
412 int num_good_scores = 0;
413 for (
int i = 0; i < 4; ++i) {
414 if (blob_o_score[i] > 0.0f) {
416 if (worst_score == 0.0f || blob_o_score[i] < worst_score)
417 worst_score = blob_o_score[i];
420 if (num_good_scores == 1) {
424 for (
int i = 0; i < 4; ++i) {
425 if (blob_o_score[i] == 0.0f) {
426 blob_o_score[i] = worst_score;
427 total_blob_o_score += worst_score;
432 for (
int i = 0; total_blob_o_score != 0 && i < 4; ++i) {
433 osr_->
orientations[i] += log(blob_o_score[i] / total_blob_o_score);