794 {
796 if (norm_box != nullptr) {
797 word_box = *norm_box;
798 }
799 float word_middle = (word_box.left() + word_box.right()) / 2.0f;
800 float input_y_offset = 0.0f;
803 if (row == nullptr) {
804 word_middle = word_box.left();
805 input_y_offset = word_box.bottom();
806 final_y_offset = 0.0f;
807 } else {
808 input_y_offset = row->base_line(word_middle) + baseline_shift;
809 }
810 for (
auto blob :
blobs) {
811 TBOX blob_box = blob->bounding_box();
812 float mid_x = (blob_box.left() + blob_box.right()) / 2.0f;
814 float blob_scale = scale;
815 if (numeric_mode) {
818 } else if (row != nullptr) {
819 baseline = row->base_line(mid_x) + baseline_shift;
820 }
821
822
823
824
825
826
827 blob->Normalize(block,
nullptr,
nullptr, word_middle,
baseline, blob_scale, blob_scale, 0.0f,
828 final_y_offset, inverse, pix);
829 }
830 if (word_denorm != nullptr) {
831 word_denorm->SetupNormalization(block, nullptr, nullptr, word_middle, input_y_offset, scale,
832 scale, 0.0f, final_y_offset);
833 word_denorm->set_inverse(inverse);
834 word_denorm->set_pix(pix);
835 }
836}
T ClipToRange(const T &x, const T &lower_bound, const T &upper_bound)
const int kBlnBaselineOffset
TBOX bounding_box() const
std::vector< TBLOB * > blobs