Skip to content

Instantly share code, notes, and snippets.

@ducha-aiki
Created December 4, 2019 16:16
Show Gist options
  • Save ducha-aiki/83bf407451834cad7087dba09f684df7 to your computer and use it in GitHub Desktop.
Save ducha-aiki/83bf407451834cad7087dba09f684df7 to your computer and use it in GitHub Desktop.
Grayscale dilation in kornia
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"import kornia\n",
"import torch\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from kornia.feature import *\n",
"from kornia.geometry import *\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"#copy-pasted from https://github.com/kornia/kornia/compare/master...ananyamukh6:ananyamukh6/dilation_with_foldunfold\n",
"\n",
"import torch\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"from torch.autograd import Variable\n",
"\n",
"\n",
"import torch\n",
"import kornia\n",
"import cv2\n",
"import numpy as np\n",
"import pdb # todo remove\n",
"import matplotlib.pyplot as plt\n",
"def dilation(img: torch.Tensor, structuring_element: torch.Tensor):\n",
" r\"\"\"Function that computes dilated image given a structuring element.\n",
" See :class:`~kornia.morphology.Dilation` for details.\n",
" \"\"\"\n",
" if not torch.is_tensor(img):\n",
" raise TypeError(f\"Input type is not a torch.Tensor. Got {type(img)}\")\n",
" if not torch.is_tensor(structuring_element):\n",
" raise TypeError(f\"Structuring element type is not a torch.Tensor. Got {type(structuring_element)}\")\n",
" img_shape = img.shape\n",
" if not (len(img_shape) == 3 or len(img_shape) == 4):\n",
" raise ValueError(f\"Expected input tensor to be of ndim 3 or 4, but got {len(img_shape)}\")\n",
" if len(img_shape) == 3:\n",
" # unsqueeze introduces a batch dimension\n",
" img = img.unsqueeze(0)\n",
" else:\n",
" if(img_shape[1] != 1):\n",
" raise ValueError(f\"Expected a single channel image, but got {img_shape[1]} channels\")\n",
" if len(structuring_element.shape) != 2:\n",
" raise ValueError(\n",
" f\"Expected structuring element tensor to be of ndim=2, but got {len(structuring_element.shape)}\")\n",
"\n",
" # Check if the input image is a binary containing only 0, 1\n",
" unique_vals = torch.unique(img)\n",
"\n",
" if len(unique_vals) > 2:\n",
" raise ValueError(\n",
" f\"Expected only 2 unique values in the tensor, since it should be binary, but got {len(torch.unique(img))}\")\n",
" if not ((unique_vals == 0.0) + (unique_vals == 1.0)).all():\n",
" raise ValueError(\"Expected image to contain only 1's and 0's since it should be a binary image\")\n",
"\n",
" # Convert structuring_element from shape [a, b] to [1, 1, a, b]\n",
" structuring_element = structuring_element.unsqueeze(0).unsqueeze(0)\n",
"\n",
" se_shape = structuring_element.shape\n",
" conv1 = F.conv2d(img, structuring_element, padding=(se_shape[2] // 2, se_shape[2] // 2))\n",
"\n",
" convert_to_binary = (conv1 > 0).float()\n",
"\n",
" if len(img_shape) == 3:\n",
" # If the input ndim was 3, then remove the fake batch dim introduced to do conv\n",
" return torch.squeeze(convert_to_binary, 0)\n",
" else:\n",
" return convert_to_binary\n",
"\n",
"\n",
"from torch.nn import functional as f\n",
"\n",
"def dilation2(img: torch.Tensor, structuring_element: torch.Tensor):\n",
" r\"\"\"Function that computes dilated image given a structuring element.\n",
" See :class:`~kornia.morphology.Dilation` for details.\n",
" \"\"\"\n",
" if not torch.is_tensor(img):\n",
" raise TypeError(f\"Input type is not a torch.Tensor. Got {type(img)}\")\n",
" if not torch.is_tensor(structuring_element):\n",
" raise TypeError(f\"Structuring element type is not a torch.Tensor. Got {type(structuring_element)}\")\n",
" img_shape = img.shape\n",
" if not (len(img_shape) == 3 or len(img_shape) == 4):\n",
" raise ValueError(f\"Expected input tensor to be of ndim 3 or 4, but got {len(img_shape)}\")\n",
" if len(img_shape) == 3:\n",
" # unsqueeze introduces a batch dimension\n",
" img = img.unsqueeze(0)\n",
" else:\n",
" if(img_shape[1] != 1):\n",
" raise ValueError(f\"Expected a single channel image, but got {img_shape[1]} channels\")\n",
" if len(structuring_element.shape) != 2:\n",
" raise ValueError(\n",
" f\"Expected structuring element tensor to be of ndim=2, but got {len(structuring_element.shape)}\")\n",
"\n",
" img_pad = torch.nn.ConstantPad2d((structuring_element.shape[0]//2, structuring_element.shape[0]//2, structuring_element.shape[1]//2, structuring_element.shape[1]//2), 0)(img)\n",
" windows = f.unfold(img_pad, kernel_size=structuring_element.shape)\n",
" #pdb.set_trace()\n",
" # st_elem_tmp of shape [1, 9, 1] (assuming structuring_element was 3x3)\n",
" st_elem_tmp = structuring_element.flatten().unsqueeze(0).unsqueeze(-1)\n",
" processed = windows.add(st_elem_tmp).max(dim=1, keepdims=True)[0]\n",
" out = f.fold(processed, img.shape[-2:], kernel_size=1)\n",
"\n",
" #pdb.set_trace()\n",
"\n",
" if len(img_shape) == 3:\n",
" # If the input ndim was 3, then remove the fake batch dim introduced to do conv\n",
" return torch.squeeze(out, 0)\n",
" else:\n",
" return out\n",
"\n",
"\n",
"def dilation3(img: torch.Tensor, structuring_element: torch.Tensor):\n",
" r\"\"\"Function that computes dilated image given a structuring element.\n",
" See :class:`~kornia.morphology.Dilation` for details.\n",
" \"\"\"\n",
" if not torch.is_tensor(img):\n",
" raise TypeError(f\"Input type is not a torch.Tensor. Got {type(img)}\")\n",
" if not torch.is_tensor(structuring_element):\n",
" raise TypeError(f\"Structuring element type is not a torch.Tensor. Got {type(structuring_element)}\")\n",
" img_shape = img.shape\n",
" if not (len(img_shape) == 3 or len(img_shape) == 4):\n",
" raise ValueError(f\"Expected input tensor to be of ndim 3 or 4, but got {len(img_shape)}\")\n",
" if len(img_shape) == 3:\n",
" # unsqueeze introduces a batch dimension\n",
" img = img.unsqueeze(0)\n",
" else:\n",
" if(img_shape[1] != 1):\n",
" raise ValueError(f\"Expected a single channel image, but got {img_shape[1]} channels\")\n",
" if len(structuring_element.shape) != 2:\n",
" raise ValueError(\n",
" f\"Expected structuring element tensor to be of ndim=2, but got {len(structuring_element.shape)}\")\n",
"\n",
" img_pad = torch.nn.ConstantPad2d((structuring_element.shape[0]//2, structuring_element.shape[0]//2, structuring_element.shape[1]//2, structuring_element.shape[1]//2), 0)(img)\n",
" windows = f.unfold(img_pad, kernel_size=structuring_element.shape)\n",
" #pdb.set_trace()\n",
" # st_elem_tmp of shape [1, 9, 1] (assuming structuring_element was 3x3)\n",
" st_elem_tmp = structuring_element.flatten().unsqueeze(0).unsqueeze(-1)\n",
" max_kernel = structuring_element.max()\n",
" processed = windows.add(st_elem_tmp).max(dim=1, keepdims=True)[0] - max_kernel\n",
" out = f.fold(processed, img.shape[-2:], kernel_size=1)\n",
"\n",
" #pdb.set_trace()\n",
"\n",
" if len(img_shape) == 3:\n",
" # If the input ndim was 3, then remove the fake batch dim introduced to do conv\n",
" return torch.squeeze(out, 0)\n",
" else:\n",
" return out"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f799b50a150>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"timg = torch.zeros(1,1,12,12)\n",
"timg[0,0,3:5, 4:6] = 0.8\n",
"timg[0,0,4, 5] = 1.0\n",
"\n",
"plt.imshow(kornia.utils.tensor_to_image(timg))\n",
"plt.figure()\n",
"\n",
"timg_binary = timg > 0\n",
"\n",
"plt.imshow(kornia.utils.tensor_to_image(timg_binary))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tensor([[[[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.8000, 0.8000, 0.8000, 0.8000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.8000, 1.0000, 1.0000, 1.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.8000, 1.0000, 1.0000, 1.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.8000, 1.0000, 1.0000, 1.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
" 0.0000, 0.0000, 0.0000, 0.0000]]]])\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"kernel_flat = torch.zeros(3,3)\n",
"dil_timg = dilation2(timg.float(), kernel_flat)\n",
"plt.imshow(kornia.tensor_to_image(dil_timg))\n",
"print(dil_timg)\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tensor([[[[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]]])\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPsAAAD4CAYAAAAq5pAIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAKc0lEQVR4nO3dX6icB52H8ee7OWli4ooVV7FJ2VYo3S3CWjlotSBLo1hXMV640EKlK0Ju/FNFkLg3vfVCRC9ECLVasLQssWCRYi1RkYUlmKYFmx6lpWp7bDRZZFUKm6T424szQvaYmDDvO+cd/D0fKGdmzvS8X5I8eWfmTJJUFZL++v3N1AMkbQ1jl5owdqkJY5eaMHapiZWtPNgV2VE72b2Vh5Ra+V9e4mydyYU+t6Wx72Q3b8u+rTyk1MrROnLRz/kwXmrC2KUmjF1qwtilJgbFnuTWJD9L8mySg2ONkjS+uWNPsg34CvBe4Abg9iQ3jDVM0riGnNnfCjxbVc9V1VngQWD/OLMkjW1I7HuAF867vj677f9JciDJsSTHznFmwOEkDTEk9gu9S+fP/nB8VR2qqtWqWt3OjgGHkzTEkNjXgavPu74XeHHYHEmLMiT2HwPXJbk2yRXAbcDD48ySNLa53xtfVS8n+TjwKLANuLeqToy2TNKoBv1BmKp6BHhkpC2SFsh30ElNGLvUhLFLTRi71ISxS00Yu9SEsUtNGLvUhLFLTRi71ISxS00Yu9SEsUtNGLvUhLFLTRi71ISxS00Yu9SEsUtNGLvUhLFLTQz622W14dEXn5x6wtJ7z1VvnnpCe57ZpSaMXWrC2KUmjF1qwtilJuaOPcnVSX6QZC3JiSR3jTlM0riGfOvtZeAzVXU8yd8Cjyd5rKqeHmmbpBHNfWavqpNVdXx2+Q/AGrBnrGGSxjXKc/Yk1wA3AkfH+HqSxjf4HXRJXgl8C/hUVf3+Ap8/ABwA2MmuoYeTNKdBZ/Yk29kI/f6qeuhC96mqQ1W1WlWr29kx5HCSBhjyanyArwFrVfXF8SZJWoQhZ/abgQ8DtyR5cvbfv4y0S9LI5n7OXlX/CWTELZIWyHfQSU0Yu9SEsUtNGLvUhLFLTRi71ISxS00Yu9SEsUtNGLvUhLFLTRi71ISxS00Yu9SEsUtNGLvUhLFLTRi71ISxS00Yu9SEsUtNGLvUhLFLTRi71ISxS00Yu9SEsUtNGLvUxODYk2xL8kSS74wxSNJijHFmvwtYG+HrSFqgQbEn2Qu8D7hnnDmSFmXomf1LwGeBP17sDkkOJDmW5Ng5zgw8nKR5zR17kvcDp6rq8b90v6o6VFWrVbW6nR3zHk7SQEPO7DcDH0jyC+BB4JYk3xxllaTRzR17VX2uqvZW1TXAbcD3q+qO0ZZJGpXfZ5eaWBnji1TVD4EfjvG1JC2GZ3apCWOXmjB2qQljl5owdqkJY5eaMHapCWOXmjB2qQljl5owdqkJY5eaMHapCWOXmjB2qQljl5owdqkJY5eaMHapCWOXmjB2qYlR/nbZ7t5z1ZunniBdkmd2qQljl5owdqkJY5eaMHapiUGxJ3l1ksNJfppkLcnbxxomaVxDv/X2ZeC7VfWhJFcAu0bYJGkB5o49yauAdwL/BlBVZ4Gz48ySNLYhD+PfCJwGvp7kiST3JNm9+U5JDiQ5luTYOc4MOJykIYbEvgK8BfhqVd0IvAQc3HynqjpUVatVtbqdHQMOJ2mIIbGvA+tVdXR2/TAb8UtaQnPHXlW/Bl5Icv3spn3A06OskjS6oa/GfwK4f/ZK/HPAR4ZPkrQIg2KvqieB1ZG2SFog30EnNWHsUhPGLjVh7FITxi41YexSE8YuNWHsUhPGLjVh7FITxi41YexSE8YuNWHsUhPGLjVh7FITxi41YexSE8YuNWHsUhPGLjVh7FITxi41YexSE8YuNWHsUhPGLjUxKPYkn05yIslTSR5IsnOsYZLGNXfsSfYAnwRWq+pNwDbgtrGGSRrX0IfxK8ArkqwAu4AXh0+StAhzx15VvwK+ADwPnAR+V1Xf23y/JAeSHEty7Bxn5l8qaZAhD+OvBPYD1wJXAbuT3LH5flV1qKpWq2p1OzvmXyppkCEP498F/LyqTlfVOeAh4B3jzJI0tiGxPw/clGRXkgD7gLVxZkka25Dn7EeBw8Bx4Cezr3VopF2SRrYy5H+uqruBu0faImmBfAed1ISxS00Yu9SEsUtNGLvUhLFLTRi71ISxS00Yu9SEsUtNGLvUhLFLTRi71ISxS00Yu9SEsUtNGLvUhLFLTRi71ISxS00Yu9SEsUtNGLvUhLFLTRi71ISxS00Yu9TEJWNPcm+SU0meOu+21yR5LMkzs49XLnampKEu58z+DeDWTbcdBI5U1XXAkdl1SUvskrFX1Y+A3266eT9w3+zyfcAHR94laWTzPmd/fVWdBJh9fN14kyQtwqB/n/1yJDkAHADYya5FH07SRcx7Zv9NkjcAzD6eutgdq+pQVa1W1ep2dsx5OElDzRv7w8Cds8t3At8eZ46kRbmcb709APwXcH2S9SQfBT4PvDvJM8C7Z9clLbFLPmevqtsv8ql9I2+RtEC+g05qwtilJoxdasLYpSaMXWrC2KUmjF1qwtilJoxdasLYpSaMXWrC2KUmjF1qwtilJoxdasLYpSaMXWrC2KUmjF1qwtilJoxdasLYpSZSVVt3sOQ08MtL3O21wH9vwZzL5Z5LW7ZNnff8fVX93YU+saWxX44kx6pqdeodf+KeS1u2Te65MB/GS00Yu9TEMsZ+aOoBm7jn0pZtk3suYOmes0tajGU8s0taAGOXmlia2JPcmuRnSZ5NcnAJ9lyd5AdJ1pKcSHLX1JsAkmxL8kSS7yzBllcnOZzkp7Mfp7dPvOfTs5+rp5I8kGTnBBvuTXIqyVPn3faaJI8leWb28cqt3gVLEnuSbcBXgPcCNwC3J7lh2lW8DHymqv4RuAn42BJsArgLWJt6xMyXge9W1T8A/8SEu5LsAT4JrFbVm4BtwG0TTPkGcOum2w4CR6rqOuDI7PqWW4rYgbcCz1bVc1V1FngQ2D/loKo6WVXHZ5f/wMYv5D1TbkqyF3gfcM+UO2ZbXgW8E/gaQFWdrar/mXYVK8ArkqwAu4AXt3pAVf0I+O2mm/cD980u3wd8cEtHzSxL7HuAF867vs7EYZ0vyTXAjcDRaZfwJeCzwB8n3gHwRuA08PXZ04p7kuyeakxV/Qr4AvA8cBL4XVV9b6o9m7y+qk7CxkkEeN0UI5Yl9lzgtqX4nmCSVwLfAj5VVb+fcMf7gVNV9fhUGzZZAd4CfLWqbgReYqKHpwCz58H7gWuBq4DdSe6Yas8yWpbY14Grz7u+lwkegm2WZDsbod9fVQ9NPOdm4ANJfsHG05xbknxzwj3rwHpV/enRzmE24p/Ku4CfV9XpqjoHPAS8Y8I95/tNkjcAzD6emmLEssT+Y+C6JNcmuYKNF1YennJQkrDxfHStqr445RaAqvpcVe2tqmvY+PH5flVNduaqql8DLyS5fnbTPuDpqfaw8fD9piS7Zj93+1ieFzIfBu6cXb4T+PYUI1amOOhmVfVyko8Dj7LxKuq9VXVi4lk3Ax8GfpLkydlt/15Vj0y4adl8Arh/9hv0c8BHphpSVUeTHAaOs/GdlCeY4G2qSR4A/hl4bZJ14G7g88B/JPkoG78p/etW7wLfLiu1sSwP4yUtmLFLTRi71ISxS00Yu9SEsUtNGLvUxP8BJldaz0UYTQ8AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"kernel_flat = torch.zeros(3,3)\n",
"dil_timg_bin = dilation2(timg_binary.float(), kernel_flat)\n",
"plt.imshow(kornia.tensor_to_image(dil_timg_bin))\n",
"print(dil_timg_bin)\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tensor([[-10., 0., -10.],\n",
" [ 0., 0., 0.],\n",
" [-10., 0., -10.]])\n",
"tensor([[[[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]]])\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"kernel_cross = torch.zeros(3,3)\n",
"kernel_cross[0,0] = -10\n",
"kernel_cross[2,2] = -10\n",
"kernel_cross[0,2] = -10\n",
"kernel_cross[2,0] = -10\n",
"print(kernel_cross)\n",
"dil_timg_bin_cross = dilation2(timg_binary.float(), kernel_cross)\n",
"plt.imshow(kornia.tensor_to_image(dil_timg_bin_cross))\n",
"print(dil_timg_bin_cross)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment