Есть несколько способов подойти к этому. Проще всего было бы применить фильтр уровней с черной точкой, немного поднятой и белой точкой, немного пониженной. Это можно сделать для всех 3 цветовых каналов или выборочно для подмножества. Поскольку вы собираетесь создавать чисто черный и белый цвета, а цветное изображение отсутствует, я бы применил одинаковые настройки ко всем 3 цветным каналам. Это работает так:
destVal = (srcVal - blackPt) + srcVal / (whitePt - blackPt);
Это немного изменит цветные части изображения, вероятно, сделав их немного более или менее насыщенными.
Я попробовал это в приложении для редактирования фотографий и был разочарован результатами. Я смог убрать большую часть шума, снизив точку белого примерно до 66%. Тем не менее, логотип в верхнем левом углу настолько тонок, что в итоге он стал очень белым. Черную точку не нужно было перемещать.
Думаю, вам будет нелегко с этим логотипом. Вы можете изолировать его от других изменений, и это может помочь. Простая круглая область вокруг нее, где вы просто игнорируете какую-либо обработку, вероятно, сработает.
Но я подумал - это было сделано с помощью Word. У вас есть копия Word? Вероятно, было бы не слишком сложно собрать макет, который почти идентичен. Это все равно не поможет с логотипом. Но то, что вы можете сделать, это расположить текст так же и экспортировать его в PDF или другой формат изображения. (Или, если вы можете найти оригинальный шаблон, просто используйте его напрямую.) Затем вы можете написать некоторый код для обработки вашей отсканированной копии, и где бы пиксель был в оттенках серого (красный = зеленый = синий), используйте соответствующий пиксель из версии, которую вы сделали. , иначе используйте пиксели от скана. Это даст вам все штампы и подписи, при этом текст будет красивым и четким. Возможно, вы могли бы даже найти логотип организации в Интернете. На самом деле, в Википедии даже есть копия их логотипа .
Возможно, вам понадобится какой-то порог для градаций серого, потому что некоторые пиксели могут быть близки, но имеют небольшой оттенок цвета. Один из вариантов может быть примерно таким:
if ((fabs(red - green) < threshold) && (fabs(red - blue) < threshold))
{
destVal = recreationVal; // The output is the same as the copy you made manually
}
else
{
destVal = scannedVal; // The output is the same as the scan
}
Вы можете обнаружить, что это разъедает некоторые из цветных меток, поэтому вы можете сделать второй проход по выходному сигналу, когда любой пиксель, расположенный рядом с цветным пикселем, приносит соответствующий пиксель из исходного сканирования.