diff --git a/Sobel-Operator.ipynb b/Sobel-Operator.ipynb index 67b52bd..3516ed7 100644 --- a/Sobel-Operator.ipynb +++ b/Sobel-Operator.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -13,75 +13,11 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 318, "metadata": {}, "outputs": [], "source": [ - "# Quelle: https://en.wikipedia.org/wiki/Kernel_(image_processing)#Convolution\n", - "def convolution(image, kernel):\n", - " output = np.copy(image)\n", - " # Zero padding\n", - " output = np.pad(output, ((1,1), (1,1)), mode='constant')\n", - " for i, image_row in enumerate(output):\n", - " for k, image_pixel in enumerate(image_row):\n", - " acc = 0.0\n", - " for n, kernel_row in enumerate(kernel):\n", - " for m, kernel_pixel in enumerate(kernel_row):\n", - " if n == 0 and m == 0:\n", - " i_saved = i\n", - " k_saved = k\n", - " \n", - " \n", - " if n == (i - i_saved) and m == (k - k_saved):\n", - " acc += float(kernel_pixel) * float(image_pixel)\n", - "\n", - " output[i][k] = acc\n", - "\n", - " # Shave off the padding\n", - " return output[1:-1,1:-1]" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "def convert_string_matrix_to_array(base, type_=float):\n", - " return np.array([[type_(number) for number in line.split(\" \")] for line in base.split(\"\\n\") if line != \"\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "metadata": {}, - "outputs": [], - "source": [ - "def sobel_max(*images):\n", - " height = len(images[0])\n", - " width = len(images[0][0])\n", - " output = np.zeros((height, width), dtype=int)\n", - " for i in range(height):\n", - " for j in range(width):\n", - " output[i][j] = max([image[i][j] for image in images])\n", - "\n", - " return output" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Eingabe aus Aufgabe" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "metadata": {}, - "outputs": [], - "source": [ - "base = convert_string_matrix_to_array(\"\"\"\n", + "base = \"\"\"\n", "5 2 6 2 3 2 1 2 3 1\n", "1 3 6 7 9 2 4 4 7 1\n", "1 5 8 8 10 17 21 19 9 4\n", @@ -92,60 +28,51 @@ "3 5 6 40 34 42 6 4 2 5\n", "4 9 16 14 32 51 13 6 6 2\n", "4 2 5 3 3 3 5 3 3 3\n", - "\"\"\", type_=int)\n", - "\n", - "mean_value = np.ones((3,3)) * 1/9\n", - "\n", - "sobel_operator_x = convert_string_matrix_to_array(\"\"\"\n", - "1 0 -1\n", - "2 0 -2\n", - "1 0 -1\n", - "\"\"\") * 1/4\n", - "\n", - "sobel_operator_y = convert_string_matrix_to_array(\"\"\"\n", - "1 2 1\n", - "0 0 0\n", - "-1 -2 -1\n", - "\"\"\") * 1/4\n", - "\n", - "sobel_operator_forward_slash = convert_string_matrix_to_array(\"\"\"\n", - "0 -1 -2\n", - "1 0 -1\n", - "2 1 0\n", - "\"\"\") * 1/4\n", + "\"\"\"\n", "\n", - "sobel_operator_backward_slash = \"\"\"\n", - "???\n", - "\"\"\"\n" + "S_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])\n", + "S_y = S_x.T\n", + "S_fs = np.array([[0, -1, 2], [-1, 0, 1], [2, 1, 0]])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 319, + "metadata": {}, + "outputs": [], + "source": [ + "base = np.array([[int(number) for number in line.split(\" \")] for line in base.split(\"\\n\") if line != \"\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Eingabe als Bild" + "# Eingelesenes Bild" ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, + "execution_count": 320, + "metadata": { + "scrolled": false + }, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 7, + "execution_count": 320, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "" ] }, "metadata": {}, @@ -160,45 +87,52 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# TODO Grauwertspeizung" + "# Faltungsoperator" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 321, "metadata": {}, "outputs": [], "source": [ - "# TODO Grauwertspreizung" + "def convolve(image, kernel):\n", + " kernel_size = kernel.shape[0]\n", + " _image = np.pad(image, ((kernel_size//2, kernel_size//2), (kernel_size//2, kernel_size//2)), 'constant') # padd with zeros\n", + " output_image = np.copy(image)\n", + " for (x, y), value in np.ndenumerate(image):\n", + " window = _image[x:x+kernel_size, y:y+kernel_size] # image[x-1:x+2, y-1:y+2] but x=x+1, y=y+1 because of pad\n", + " output_image[x, y] = np.sum(np.multiply(window, kernel))\n", + " return output_image" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Sobel Operator along x-axis" + "# Mittelwertfilter" ] }, { "cell_type": "code", - "execution_count": 140, + "execution_count": 322, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 140, + "execution_count": 322, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "" ] }, "metadata": {}, @@ -206,37 +140,58 @@ } ], "source": [ - "x = convolution(base, sobel_operator_x)\n", - "plt.imshow(x, cmap=\"gray\", norm=NoNorm())" + "average_kernel = np.zeros((3,3)) + 1/9\n", + "avg = convolve(base, average_kernel)//1\n", + "plt.imshow(avg, cmap=\"gray\", norm=NoNorm())\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Sobel Operator along y-axis" + "# Grauwertspeizung (Quelle: http://home.in.tum.de/~perzylo/Proseminar/Punktoperatoren.pdf)" + ] + }, + { + "cell_type": "code", + "execution_count": 323, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "def scale(image, g_1, g_2, G=255):\n", + " output = np.copy(image)\n", + " for (x, y), value in np.ndenumerate(image):\n", + " if value < g_1:\n", + " output[x, y] = 0\n", + " elif value > g_2:\n", + " output[x, y] = G - 1\n", + " else:\n", + " output[x, y] = (G - 1)*(value - g_1)/(g_2 - g_1)\n", + " return output\n" ] }, { "cell_type": "code", - "execution_count": 137, + "execution_count": 324, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 137, + "execution_count": 324, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "" ] }, "metadata": {}, @@ -244,30 +199,30 @@ } ], "source": [ - "y = convolution(base, sobel_operator_y)\n", - "plt.imshow(y, cmap=\"gray\", norm=NoNorm())" + "scaled = scale(base, np.min(base), np.max(base))\n", + "plt.imshow(scaled, cmap=\"gray\", norm=NoNorm())" ] }, { "cell_type": "code", - "execution_count": 135, + "execution_count": 325, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 135, + "execution_count": 325, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "" ] }, "metadata": {}, @@ -275,47 +230,92 @@ } ], "source": [ - "forward_slash = convolution(base, sobel_operator_forward_slash)\n", - "plt.imshow(forward_slash, cmap=\"gray\", norm=NoNorm())" + "x = convolve(base, S_x)\n", + "plt.imshow(scale(x, np.min(x), np.max(x)), cmap=\"gray\", norm=NoNorm())" ] }, { "cell_type": "code", - "execution_count": 136, + "execution_count": 326, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 326, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "#backward_slash = convolution(base, sobel_operator_backward_slash)\n", - "#plt.imshow(forward_slash, cmap=\"gray\", norm=NoNorm())" + "y = convolve(base, S_y)\n", + "plt.imshow(scale(y, np.min(y), np.max(y)), cmap=\"gray\", norm=NoNorm())" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 327, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 327, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "## Max of all " + "fs = convolve(base, S_fs)\n", + "plt.imshow(scale(fs, np.min(fs), np.max(fs)), cmap=\"gray\", norm=NoNorm())" ] }, { "cell_type": "code", - "execution_count": 139, + "execution_count": 328, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 139, + "execution_count": 328, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "" ] }, "metadata": {}, @@ -323,16 +323,42 @@ } ], "source": [ - "output = sobel_max(x, y, forward_slash)\n", - "plt.imshow(output, cmap=\"gray\", norm=NoNorm())" + "g = np.minimum(x, y, fs)\n", + "plt.imshow(scale(g, np.min(g), np.max(g)), cmap=\"gray\", norm=NoNorm())" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 278, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 278, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import cv2\n", + "base = cv2.imread(\"input.ppm\", 0)\n", + "plt.imshow(base, cmap=\"gray\", norm=NoNorm())\n", + "#plt.imshow(sobel(im), cmap=\"gray\")" + ] } ], "metadata": { @@ -344,14 +370,14 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.15" + "pygments_lexer": "ipython3", + "version": "3.6.5" } }, "nbformat": 4, diff --git a/input.ppm b/input.ppm new file mode 100644 index 0000000..d989d0b Binary files /dev/null and b/input.ppm differ