«ОГЛАВЛЕНИЕ Введение Глава 1. Анализ существующих методов защитной маркировки растровых изображений цифровыми водяными знаками 1.1. Основные растровые форматы цифровых изображений 1.2. Обзор видов модификации защищаемых ...»
– подменю «Изображение», позволяющее запустить процесс защитной маркировки или процесс ее поиска в исследуемом изображении.
Программный модуль работает с растровыми изображениями, сохраненными в графических форматах BMP, GIF, PNG, TIFF и JPEG. Выбор для сохранения промаркированных изображений графического формата PNG-24 обусловлен его алгоритмом сжатия без потерь, а также хорошими цветовыми характеристиками.
Для большей наглядности разделения изображения на фрагменты в блоке «Изображение» предусмотрена опция «Сетка». При установке флажка напротив этого пункта на отображаемое изображение накладывается сетка, показывающая разбиение этого изображения на блоки 64 х 64. Неполные блоки при этом остаются справа и снизу.
Для защитной маркировки растровых изображений в разработанном программном модуле предусмотрены два вида ЦВЗ:
– 8-битный монохромный логотип размером 4 х 2 пикселя;
– 5 типов электронных сигнатур, циклично встраиваемых сверху вниз в центральную область блоков защищаемого изображения: 16-ти битная CRC по красному каналу текущего блока, 16-ти битная CRC по зеленому каналу текущего блока, 16-ти битная CRC по синему каналу текущего блока (без рассмотрения области встраивания ЭП), ширина изображения и его высота.
Разработанный программный модуль предоставляет пользователю следующие возможности:
защитная маркировка растрового изображения с возможностью создания собственного монохромного логотипа и автоматически генерируемыми электронными сигнатурами;
– сохранение промаркированного растрового изображения в отдельном файле формата PNG;
– поиск в исследуемом растровом изображении защитной маркировки (монохромный логотип и электронные сигнатуры);
– проверка целостности исследуемого растрового изображения с помощью исследования всех его блоков на наличие и совпадение логотипа, а также посредством сравнения расчетных и найденных в блоках значений ЭП;
– графическая визуализация результатов проверки аутентичности и целостности выделением цветом оригинальных и фальсифицированных блоков, а также корректных и некорректных электронных сигнатур;
– возможность сохранения результата визуализации в отдельный файл формата PNG.
Диаграмма классов разработанного программного модуля представлена на рисунке 4.3.
Рисунок 4.3. Диаграмма классов разработанного программного модуля Краткая характеристика показанным на диаграмме классам дана в таблице 4.1.
Двумерное Дискретно-Косинусное Преобразование (ДКП) Разбиение изображения на блоки и их преобразование BlockSeparator Класс, отвечающий за работу с электронной сигнатурой Класс, отвечающий за работу с монохромным логотипом Организация взаимодействия функций ЦВЗ CVZInterface DataBlockCoord Информация о координатах для установления/распознавания GBox PictData PictDrawing Recognition Взаимодействие с интерфейсом программного модуля Main_Form Рассмотрим по отдельности параметры каждого из указанных классов и методы, используемые в них. Параметры и методы, используемые в классе DKP, указаны в таблицах 4.2 и 4.3.
double f(int n, int m, int[,] MRGB) double DKPfuCos(int n, int m, int u, int[,] MRGB) double SumuN(int m, int u, int[,] MRGB) double Alphau(int m, int u, int[,] MRGB) double DKPvCos(int m, int v) double SumvM(int u, int v, int[,] MRGB) double Alphav(int u, int v, int[,] MRGB) double Z(int u, int v, int[,] MRGB) double av(int v) double Zum(double[,,] Z, int u, int m, int f) double DKPuCos(int n, int u) double Zum(double[,] Z, int u, int m) double uZ(double[,,] Z, int n, int m, int f) double uZ(double[,] Z, int n, int m) отвечающий за размерность блока. Методы, используемые в классе BlockSeparator, указаны в таблице 4.4.
int ClcBlockCount(int Len) void DevideToBlocks(int N, int M) void DrawNewBlockQ(Bitmap[,] Bmp, int Закраска промежуточного блока i, int j) int[] DrawNewBlockG(Bitmap[,] Bmp, int i, Закраска крайнего блока int j) void GetRGBIntens(Bitmap Bmp, bool Edg, Получение поблочных значений GBox G) void Separate8x8Block(ref int[,] fnew, int[,] Выделение блока 8 х f, int N0, int M0) void CreateImageBox(PictData P, int iShift, Создание блока "изображение" int jShift, int ikm, int jkm) void CreateSepBoxes(PictData P, int iShift, Создание блоков 64х int jShift, GBox G, bool ed) void BlockEdgForming(PictData P, int i, int Формирование границ блоков j, int iShift, int jShift, GBox G, bool ed) void SetIntens(PictData P, int i, int j, GBox G) Задание интенсивности блоков void CreateImageBoxTMP(PictData P, int Создание блока "временное iShift, int jShift, int ikm, int jkm) Параметры и методы, используемые в классе CRC, указаны в таблицах 4.5 и 4.6.
Boxes CRC(int n, int m, int lx, int ly) void SepToBoxes(GBox G) void SetIntensRGBSep(GBox G, int i, int j) Задание интенсивностей пикселей GBox ConcateBoxes(ref GBox G) void SetIntensRGBConc(GBox G, int i, int Получение интенсивностей void SetCVZ(int p1, int[,] RGB, int it, int Встраивание электронной сигнатуры widhei) double[,] CalcFreqMatrix(double[,] Freq, Вычисление частотной матрицы int[,] Box, DKP _DKP) double InsertCVZBit(double[] A, double Встраивание бита сигнатуры в блок A1, double A2, int LogoNum, int p) int[,] CalcNewIntens(int[,] I, double[,] Freq, Вычисление новой матрицы DKP _DKP) int MidIntensAll(int[,] I) int MidIntens32(int[,] I) void GetLogoRGB(int[,] Logo, int Num) Параметры и методы, используемые в классе CVZ, указаны в таблицах 4.7 и 4.8.
Freq Intens _Overlaps A1_i, A1_j, A2_i, A2_j Integer CVZ(int N, int M, int NW, int NH, int p1) void MakeBCVZ(DKP _DKP, int[,] RGBData, int[] Krd) void nMakeBCVZ(int[,] RGBData, int[] Krd, CRC _CRC) void MakeRCVZ(DKP _DKP, int[,] RGBData, int[] Krd) void nMakeRCVZ(int[,] RGBData, int[] Krd, CRC _CRC) MakeOneCVZ(DKP _DKP, int[,] RGBData, int[] Krd, int im) double[,,] Separate(DKP _DKP, int iS, int jS, int[,] RGBData, int NB) double[,,] DoCVZ(int iC, int jC) double[,,] DoCVZ1(int iC, int jC)