OpenCV for OCR: Como calcular níveis de limiar para OCR de imagem em cinza

Estou tentando preparar imagens para OCR, e até agora é o que fiz usando informações deExtraindo texto OpenCV

A partir da imagem resultante, utilizo os contornos que foram filtrados para criar uma máscara da seguinte maneira:

//this is the mask of all the text
Mat maskF = Mat::zeros(rgb.rows, rgb.cols, CV_8UC1);
// CV_FILLED fills the connected components found - CV_FILLED to fill
drawContours(maskF, letters, -1, Scalar(255), CV_FILLED);
cv::imwrite("noise2-Mask.png", maskF);

o img resultante é promissor:

considerando que este era meu img original:

Infelizmente, executar o Tesseract nele gera alguns problemas, acho que os níveis de cinza que você vê entre as letras das palavras confundem o tesseract - então, você está pensando sim, vamos fazer uma transformação binária, bem, que apenas perde a segunda metade da página, então Tentei aplicar o limite do Otsu também, mas o texto fica pixelizado e os caracteres perdem sua forma.

Eu tentei o CalcBlockMeanVariance deOCR de limite adaptável OpenCV mas não consegui compilar (e não tenho certeza se entendi tudo), a compilação engasga

res=1.0-res;
res=Img+res;

De qualquer forma, se alguém tiver alguma sugestão, eu aprecio isso! Observe que as frações raramente são reconhecidas pelo Tesseract, mas estou escrevendo um novo conjunto de treinamento que, esperamos, melhorará a taxa de recuperação)

questionAnswers(2)

yourAnswerToTheQuestion