
- •§ Виды мультимедийной информации. Цифровое изображение. Цифровой звук. Цифровое видео.
- •Недостатки:
- •Сжатие с потерями. Основано на отбрасывании части информации (как правило наименее воспринимаемой глазом).
- •Разное:
- •2.1. Bitmapinfoheader – наиболее простой вариант заголовка. Приложения для Windows nt 3.51 и более ранних могут использовать только эту структуру. Размер 40 байт.
- •2.3. Bitmapv5header – Win95/nt 4.0: приложения могут использовать bitmapv4header. Win nt 3.51 и более ранние должны использовать структуру bitmapinfoheader.
- •Файл bmp может не содержать палитры, если в нём хранится несжатое полноцветное изображение.
- •Алгоритм визуальной криптографии
- •Matlab-реализация алгоритма
- •Результаты
- •Заключение
Matlab-реализация алгоритма
Matlab-функция, выполняющая разделения исходного двоичного изображения на два теневых «в лоб», использующая 4 (из 6 возможных, см. рис. 6) состояния пикселя будет иметь следующий вид:
function [S1,S2] =getShdwImg(Img)
% получение теневых изображений S1 и S2 из исходного бинарного изображения (Img)
%
% получаем размер исходного изображения
[m,n] = size(Img);
% запасаемся памятью для каждого теневого изображения :)
S1= zeros(2*m,2*n);
S2= zeros(2*m,2*n);
% для каждого пикселя исходного изображения - действуем согласно Рис. 1
% Примечание:
for i=1:m-1
for j=1:n-1
r = randi(4);
if(Img(i,j)==1)
switch r
case 1,
S1(2*i,2*j)=1;
S1(2*i+1,2*j)=1;
S1(2*i,2*j+1)=0;
S1(2*i+1,2*j+1)=0;
S2(2*i,2*j)=1;
S2(2*i+1,2*j)=1;
S2(2*i,2*j+1)=0;
S2(2*i+1,2*j+1)=0;
case 2,
S1(2*i,2*j)=0;
S1(2*i+1,2*j)=0;
S1(2*i,2*j+1)=1;
S1(2*i+1,2*j+1)=1;
S2(2*i,2*j)=0;
S2(2*i+1,2*j)=0;
S2(2*i,2*j+1)=1;
S2(2*i+1,2*j+1)=1;
case 3,
S1(2*i,2*j)=0;
S1(2*i+1,2*j)=1;
S1(2*i,2*j+1)=1;
S1(2*i+1,2*j+1)=0;
S2(2*i,2*j)=0;
S2(2*i+1,2*j)=1;
S2(2*i,2*j+1)=1;
S2(2*i+1,2*j+1)=0;
case 4,
S1(2*i,2*j)=1;
S1(2*i+1,2*j)=0;
S1(2*i,2*j+1)=0;
S1(2*i+1,2*j+1)=1;
S2(2*i,2*j)=1;
S2(2*i+1,2*j)=0;
S2(2*i,2*j+1)=0;
S2(2*i+1,2*j+1)=1;
end
else
switch r
case 1,
S1(2*i,2*j)=1;
S1(2*i+1,2*j)=1;
S1(2*i,2*j+1)=0;
S1(2*i+1,2*j+1)=0;
S2(2*i,2*j)=0;
S2(2*i+1,2*j)=0;
S2(2*i,2*j+1)=1;
S2(2*i+1,2*j+1)=1;
case 2,
S1(2*i,2*j)=0;
S1(2*i+1,2*j)=0;
S1(2*i,2*j+1)=1;
S1(2*i+1,2*j+1)=1;
S2(2*i,2*j)=1;
S2(2*i+1,2*j)=1;
S2(2*i,2*j+1)=0;
S2(2*i+1,2*j+1)=0;
case 3,
S1(2*i,2*j)=0;
S1(2*i+1,2*j)=1;
S1(2*i,2*j+1)=1;
S1(2*i+1,2*j+1)=0;
S2(2*i,2*j)=1;
S2(2*i+1,2*j)=0;
S2(2*i,2*j+1)=0;
S2(2*i+1,2*j+1)=1;
case 4,
S1(2*i,2*j)=1;
S1(2*i+1,2*j)=0;
S1(2*i,2*j+1)=0;
S1(2*i+1,2*j+1)=1;
S2(2*i,2*j)=0;
S2(2*i+1,2*j)=1;
S2(2*i,2*j+1)=1;
S2(2*i+1,2*j+1)=0;
end
end
end
end
Функция getShdwImg разбивает исходное изображение так, как показано на Рис. 1, с единственной разницей только в том, что в двоичных изображениях Matlab — черные пиксели изображения равну нулю, а белые, соответственно, равны единице. Ниже приведен код Matlab-скрипта, демонстрирующий работу алгоритма разделения секретной визуальной информации.
close all
% считываем исходное RGB-изображение и преобразуем его в бинарное
biImg = imread('nordavind_logo.jpg');
biImg = rgb2gray(biImg);
level = graythresh(biImg); % пороговая фильтрация по Отсу (Otsu)
biImg = im2bw(biImg,level);
% выводим результат на экран
figure(1)
imshow(biImg);
title(['Original binary image']);
% получаем два теневых изображения
[S1,S2] =getShdwImg(biImg);
% выводим их на экран
figure(2)
imshow(S1);
title(['Shadow image S1']);
%
figure(3)
imshow(S2);
title(['Shadow image S2']);
% выводим на экран результат их наложения друг на друга
% различными способами
figure(4)
% imshow(or(S1, S2));
% imshow(and(S1,S2));
imshow(~xor(S1, S2)); % операция “~”(NOT) используется, чтобы получить черный текст на белом фоне, а не наоборот
title(['Superimposed image']);