Читайте также: |
|
Наприклад у нас є зображення 7 на 7 пікселів:
1 | 8 | 15 | 22 | 29 | 36 | |
2 | 9 | 16 | 23 | 30 | 37 | |
3 | 10 | 17 | 24 | 31 | 38 | |
4 | 11 | 18 | 25 | 32 | 39 | |
5 | 12 | 19 | 26 | 33 | 40 | |
6 | 13 | 20 | 27 | 34 | 41 | |
7 | 14 | 21 | 28 | 35 | 42 | 49 |
Ми їх групуємо у квадрати 2 на 2 піклеля зверху вниз і зліва на право:
І | IV | VII | ||||
ІІ | V | VIII | ||||
ІІІ | VI | IX | ||||
7 | 14 | 21 | 28 | 35 | 42 | 49 |
Чому ми виділили крайні пікселі: справа у тому, що ці крайні пікселі не можуть утворити квадрати, тому їх переміщення є проблемо, а вирішенням є не переміщення цих пікселі, тому якщо виразити цей підхід псевдокодом[4], то переміщувані пікселі це пікселі від [номер_стрічки][1][5] до
[номер_стрічки][ширина_зображення - ширина_зображення mod[6] ширина_квадрата] і від [1][номер_стовбчика] до [висота_зображення - висота_зображення mod висота_квадрата][1].
Далі ми переміщаємо квадрати симетрично до горизонтальної центральної вісі (квадрати II, V, VIII):
ІII | IV | IX | ||||
ІІ | V | VIII | ||||
I | VI | VII | ||||
7 | 14 | 21 | 28 | 35 | 42 | 49 |
Квадрати центральної вісі (II, V, VIII) не переміщаються тому, що їх нікуди переміщати (ні з ким міняти). Але якщо б буде щось на кшталт цього:
І | |
ІІ | |
III | |
IV |
То при переміщенні квадратів центральна вісь буде на межі II і III, і квадратів, що не будуть переміщатися не буде:
ІV | |
ІІI | |
II | |
I |
Щоб «заплутати» очі людини, що бачить зашифроване зображення парні стовпчики шифруватись не будуть!
Тобто стовпчик 2 шифруватись не буде:
IV | |
V | |
VI | |
Далі буде виконуватись перемішування по вертикалі, реалізація та ж, що і у перемішуванні по горизонталі:
III | IV | IX | ||||
ІІ | V | VIII | ||||
I | VI | VII | ||||
7 | 14 | 21 | 28 | 35 | 42 | 49 |
IX | IV | III | ||||
ІІ | V | VIII | ||||
VII | VI | I | ||||
7 | 14 | 21 | 28 | 35 | 42 | 49 |
Отже, я гадаю, що алгоритм шифрування досить зрозумілий.
2.4 Фактична реалізація алгоритму
Фактично весь алгоритм є 2 блоками з 4 вкладених циклів: перший блок відповідає за шифрування по вертикалі, а другий – по горизонталі. Бо обидва блоки можна узагальнити однією формулою, бо шифрування по горизонталі можна представити як шифрування по вертикалі, де ширина – це висота оригінального зображення, а висота – зрозуміло, ширина оригінального зображення.
Отже приступимо[7]:
Нехай:
const Середина = ( Висота - Висота mod Розмір_Квадрата ) / 2 –
– (( Висота - Висота % Розмір_Квадрата) / 2) mod Розмір_Квадрата
const Кінець_ширини = Ширина – Ширина mod Розмір_Квадрата – Розмір_Квадрата
Варто зазначити, що при кодуванні по горизонталі замість Висота потрібно поставити Ширина і, звичайно, навпаки.
Формули, що вираховують const Середина і const Кінець встановлені експериментально.
const Кінець – це не власне кінець зображення, а крайня межа пікселів, що шифруються – Розмір_Квадрата.
в – тимчасова висота.
ш – тимчасова ширина.
Отже:
1| Від в := 0 поки в < Середина, в := в + Розмір_Квадрата;
2| Від ш := 0 поки ш < Кінець, в := в + Розмір_Квадрата * 2;
3| Від зміщення_по_висоті := 0 поки зміщення_по_висоті < 10,
4| зміщення_по_висоті = зміщення_по_висоті + 1;
5| Від зміщення_по_ширині := 0 поки зміщення_по_висоті < 10,
6| зміщення_по_висоті = зміщення_по_висоті + 1;
7| Переміняти місцями пікселі
8| [ в + зміщення_по_висоті ] [ ш + зміщення_по_ширині ] і
9| [ Кінець _висоти – в + зміщення_по_висоті ] [ ш + зміщення_по_ширині ];
Додаткові пояснення:
· 2| в := в + Розмір_Квадрата * 2 – мы «перескакуємо» 1 квадрат.
Дата добавления: 2015-07-20; просмотров: 56 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Види шифрування | | | Висновки |