{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#
یافتن Convex Hull یا پوش محدب
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "در ریاضیات، پوشش محدب(Convex hull) یا لفاف محدب مجموعه از نقاط در صفحه اقلیدسی یا فضای اقلیدسی، کوچکترین مجموعه محدبی است که شامل این مجموعه می‌باشد. به عنوان مثال، هنگامی که X یک زیر مجموعه محدود از نقاط در صفحه است، پوشش محدب ممکن است به شکل نواری نشان داده شود که در اطراف X کشیده شده است.
\n", "\n", "[https://fa.wikipedia.org/wiki/پوش_محدب](https://fa.wikipedia.org/wiki/%D9%BE%D9%88%D8%B4_%D9%85%D8%AD%D8%AF%D8%A8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
ابتدا با یک مثال ساده تعدادی نقطه تصادفی ایجاد کرده و پوشش محدب آن ها را رسم می‌کنیم:\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###
ایجاد نقاط تصادفی روی تصویر مشکی
" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import cv2\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import random\n", "np.random.seed=50\n", "random_points = np.random.randint(100, 400, 20)\n", "random_points = random_points.reshape(10, 2)\n", "# Create a black image\n", "image = np.zeros((512,512,3), np.uint8)\n", "for point in random_points:\n", " cv2.circle(image, (point[0],point[1]),8,(0,255,0),-1)\n", "plt.imshow(image[...,::-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###
محاسبه و رسم پوشش محدب
" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "hull = cv2.convexHull(random_points)\n", "cv2.drawContours(image, [hull], -1, (0,255,255), 4)\n", "plt.imshow(image[...,::-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###
مثال محاسبه پوشش محدب بعد از محاسبه کانتور
" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import cv2\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# Load source image\n", "bgr_image = cv2.imread(\"images/star.png\")\n", "\n", "# Convert image to gray and blur it\n", "src_gray = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2GRAY)\n", "\n", "ret, thresh = cv2.threshold(src_gray, 127, 255, 0)\n", "\n", "\n", "# Find contours\n", "contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\n", "\n", "# Find the convex hull object for each contour\n", "hull_list = []\n", "for i in range(len(contours)):\n", " hull = cv2.convexHull(contours[i])\n", " hull_list.append(hull)\n", " \n", "# Draw contours + hull results\n", "cv2.drawContours(bgr_image, contours, -1, (0,255,0), 1)\n", "cv2.drawContours(bgr_image, hull_list, -1, (0,0,255),1)\n", "\n", "plt.figure(figsize=[7,7])\n", "plt.imshow(bgr_image[...,::-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###
مثال دیگر روی اشکال بیشتر
" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import cv2\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# Load source image\n", "bgr_image = cv2.imread(\"images/shapes.png\")\n", "\n", "# Convert image to gray and blur it\n", "src_gray = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2GRAY)\n", "\n", "ret, thresh = cv2.threshold(src_gray, 127, 255, 0)\n", "\n", "\n", "# Find contours\n", "contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\n", "\n", "# Find the convex hull object for each contour\n", "hull_list = []\n", "for i in range(len(contours)):\n", " hull = cv2.convexHull(contours[i])\n", " hull_list.append(hull)\n", " \n", "# Draw contours + hull results\n", "cv2.drawContours(bgr_image, contours, -1, (0,255,0), 2)\n", "cv2.drawContours(bgr_image, hull_list, -1, (0,0,255),1)\n", "\n", "plt.figure(figsize=[7,7])\n", "plt.imshow(bgr_image[...,::-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "https://docs.opencv.org/3.4/d7/d1d/tutorial_hull.html" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 4 }