Я занимаюсь исследованием цифровых водяных знаков и наткнулся на статью, в которой QR-коды встраиваются, в основном, в изображения в градациях серого, а часть для извлечения цветных изображений довольно запутана:
ВВ простейших случаях, когда водяной знак был расположен над относительно однородной областью, модификация кривых гистограммы, которая приводит к изменениям контрастности и яркости, приносит удовлетворительную читаемость водяного знака.В более сложных ситуациях, когда водяной знак расположен над неоднородными элементами, такими как цветные картинки, , метод, позволяющий найти водяной знак, заключается в сегментации изображения на основе гистограммы .
* 1008.* Вот пример, который они привели:
Они сказали, что часть извлечения была сделана с использованием GIMP (я уже пробовал, но не получилось).
Я не могНичего не найдено в сегментации гистограммы, но обнаружены методы выравнивания гистограммы и пороговые методы, но ни один из них не был успешным, ниже моя неудачная попытка:
Изображение Лены было встроено с помощью QR-кода.
Процесс встраивания происходит на Y-канале исходного изображения, а в процессе извлечения я читаю изображение с водяным знаком как jpeg (цветной) и конвертирую в YUV, используяOpenCV в Python.
Код для извлекаемой части:
# Reading jpeg image and converting to YUV
image = cv2.imread('images/watermarked/2.jpeg', cv2.IMREAD_UNCHANGED)
yuv = cv2.cvtColor(image, cv2.COLOR_BGR2YUV)
Y = Y[:, :, 0]
# Standard histogram eq
equ = cv2.equalizeHist(Y)
res = np.hstack((Y, equ)) #stacking images side-by-side
# Adaptive
clahe = cv2.createCLAHE(clipLimit=10.0, tileGridSize=(8,8))
cl1 = clahe.apply(Y)
res = np.hstack((res, cl1))
Как правильно увеличить разницу яркости цветных изображений?
Ниже приведены изображения с водяными знаками, если кто-то хочет попробовать:
Лена с водяными знаками (виден не идеальный водяной знак)
Статья Изображение с водяным знаком