{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"hide_cell": true
},
"source": [
"Make me look good. Click on the cell below and press Ctrl+Enter."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"hide_cell": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.core.display import HTML\n",
"HTML(open('css/custom.css', 'r').read())"
]
},
{
"cell_type": "markdown",
"metadata": {
"hide_cell": true
},
"source": [
"SM286D · Introduction to Applied Mathematics with Python · Spring 2020 · Uhan
\n",
"\n",
"Lesson 15.
\n",
"\n",
"Steganography
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## This lesson..."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Warm up: images as matrices\n",
"- What is steganography?\n",
"- Bit shifting\n",
"- Steganography"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Warm up"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Example.__\n",
"Make a 101 by 101 pixel image of the maritime flag for Z, pictured below. Display your image."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"Figure 1. The maritime flag for Z."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"