359 lines
1.6 MiB
Plaintext
359 lines
1.6 MiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 2,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAHqCAYAAADrpwd3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB3qElEQVR4nOzdfVxUZf7/8ffEnUg4CQRIolKZmaiVlmJtaipqopltViZpmtrXW1LXNLeNWpNyN3UXy8xcUcn0u222mUVimeaaqSh5k5kV3hWEtQhiBCjn94c/z9cRRhEH5u71fDzO49Gc8zlnrutI85n5nOtcx2IYhiEAAAAAAAAAAFDJFc5uAAAAAAAAAAAArooiOgAAAAAAAAAAdlBEBwAAAAAAAADADoroAAAAAAAAAADYQREdAAAAAAAAAAA7KKIDAAAAAAAAAGAHRXQAAAAAAAAAAOygiA4AAAAAAAAAgB0U0QEAAAAAAAAAsIMiOlCHdu3apeHDh+u6665TYGCgAgMD1bx5c40aNUrbt293dvNsfPrpp7JYLHr77bed3ZQqNWvWTEOHDq3199m0aZPuueceNWzY0Pz3+vOf/2w33jAM3XXXXbJYLBo7dmyttw8A4Djkacep7Tx94sQJTZkyRfHx8br66qtlsViUnJxcKe706dOaPXu2evXqpcaNG6t+/fpq2bKlpk6dquPHj1eKz8vL09ixY3XttdcqMDBQTZs21fDhw3X48OFa6wsAoObI3Y5T27n7k08+0bBhw3TjjTcqKChI11xzje69915lZWVVih06dKgsFkul5cYbb6zy2IcOHdKwYcMUFRWlgIAAXXPNNbrvvvtqrS/wTr7ObgDgLRYsWKCxY8eqRYsWmjBhglq1aiWLxaJ9+/bprbfe0m233aZvv/1W1113nbObiv9v+fLlSkxM1MCBA7V06VJdeeWV+u677/Tjjz/a3eeVV17Rt99+W4etBAA4Annavfzyyy96/fXX1bZtW/Xv319vvPFGlXElJSVKTk7Www8/rMcff1xhYWHasWOHZsyYodWrV2v79u0KDAyUJJWWluquu+5SQUGBnnvuOd10003av3+/nn32WX300Ufat2+fgoOD67KbAIALIHe7l/nz5+uXX37RhAkTdNNNN+nYsWN6+eWX1bFjR3300Ue6++67beIDAwP1ySefVFp3vj179qhLly669tpr9de//lWNGzdWbm6uPvroo1rtD7wPRXSgDvznP//R6NGj1adPH7399tvy9/c3t919990aM2aM/vnPf1aZEM7166+/qn79+rXdXEj64YcfNHLkSI0aNUqvvvqqub5r16529zl48KCmTZumpUuXasCAAXXRTACAA5Cn3U/Tpk1VUFAgi8Win3/+2W4RPTAwUDk5OQoNDTXXdenSRU2aNNEDDzygf/3rXxo8eLAk6bPPPtOBAwf0xhtvaPjw4WZsgwYNNGjQIK1bt45RbQDgIsjd7ueVV15ReHi4zbpevXrp+uuv18yZMysV0a+44gp17Njxgsc0DEOJiYmKjo7WZ599poCAAHPbgw8+6LjGA2I6F6BOzJw5Uz4+PlqwYIFNcj/XAw88oKioKPP10KFDdeWVV2r37t2Kj49XcHCwunXrJknKzMzUvffeq8aNG6tevXq6/vrrNWrUKP3888/m/p999pksFoveeuutSu+1dOlSWSwWbdu27bL7lpeXp1GjRqlx48by9/dXTEyMnnvuOZ06dUqSVF5ervDwcCUmJlba9/jx4woMDNTEiRPNdUVFRZo8ebJiYmLk7++va665RklJSTp58uQF21FRUaEZM2aoRYsWCgwM1FVXXaU2bdrob3/7W4369cYbb+jkyZN66qmnqr3PyJEj1aNHD35gA4CbIU+7X54+e1v3xfj4+NgU0M+6/fbbJUlHjhwx1/n5+UmSrFarTexVV10lSapXr16N2goAcDxyt/vl7vML6JJ05ZVX6qabbrLJx5di48aNys7OVlJSkk0BHagNjEQHatnp06e1fv16tW/fXo0aNbqkfcvKytSvXz+NGjVKU6dONZPmd999p7i4OD3++OOyWq06ePCgZs+erTvvvFO7d++Wn5+ffve73+mWW27RK6+8oocfftjmuPPmzdNtt92m22677bL6lpeXp9tvv11XXHGF/vSnP+m6667T559/rhkzZujgwYNavHix/Pz8NHjwYL322mt65ZVX1KBBA3P/t956S7/99psee+wxSWdGAXTu3FlHjx7V008/rTZt2mjv3r3605/+pN27d2vdunV2fzDPmjVLycnJ+uMf/6i77rpL5eXl+vrrryvNd2qxWNS5c2d9+umnF+zbxo0bFRISoq+//lr33nuv9uzZo5CQEA0YMECzZs2y6Yd0pui+detWffXVV5d+IgEATkOeds88fbnO3h7eqlUrc90dd9yhdu3aKTk5WU2bNlXLli31zTff6Omnn9att96q7t2712qbAADVQ+72nNxdWFioHTt2VBqFLp2Zki0yMlLHjh1To0aN1L9/fz3//PMKCQkxYzZu3ChJCg4O1j333KNPPvlEvr6+6tKli/7617/anUMdqBEDQK3Ky8szJBkPPfRQpW2nTp0yysvLzaWiosLcNmTIEEOS8Y9//OOCx6+oqDDKy8uNQ4cOGZKMf//73+a2xYsXG5KMnTt3muu2bt1qSDKWLFlyweOuX7/ekGT885//tBszatQo48orrzQOHTpks/6vf/2rIcnYu3evYRiGsWvXLkOS8frrr9vE3X777Ua7du3M1ykpKcYVV1xhbNu2zSbu7bffNiQZH3zwgbmuadOmxpAhQ8zXCQkJxs0333zBPhmGYfj4+Bh33333ReNatGhh1KtXzwgODjZmzpxprF+/3pg1a5YRGBho3HHHHTb/VkePHjWsVquxYMECc50kY8yYMRd9HwCAc5Gn3TNPn+vYsWOGJOPZZ5+tVvzRo0eNiIgIo3379sbp06dtthUVFRl9+/Y1JJlLly5djF9++eWS2gQAqD3kbvfP3Wc98sgjhq+vr7F9+3ab9bNnzzZmz55trF271li7dq0xffp0o379+saNN95onDhxwowbNWqUIclo0KCBMXz4cGPdunXGsmXLjKZNmxphYWHGjz/+WKN2AVVhOhfAidq1ayc/Pz9zefnllyvF3H///ZXW5efn64knnlB0dLR8fX3l5+enpk2bSpL27dtnxj388MMKDw/XK6+8Yq5LTU3V1Vdf7ZD5wd5//3117dpVUVFROnXqlLn07t1bkrRhwwZJUuvWrdWuXTstXrzY3Hffvn3aunWrhg0bZnO82NhY3XzzzTbH69mzpywWywWvbN9+++368ssvNXr0aH300UcqKiqqMu7UqVP6+OOPL9q3iooK/fbbb3r66ac1bdo0denSRX/4wx+UkpKi//znPzbHeOKJJ9S2bVuNGDHioscFALgP8rTr5uma+u9//6t77rlHhmFo5cqVuuKK//s5VF5ergcffFDZ2dlauHChNm7cqCVLluiHH35Qjx49VFhYWGvtAgA4BrnbfXL3M888ozfffFNz5sxRu3btbLY9+eSTevLJJ9WjRw/16NFDM2bM0NKlS/X1119r4cKFZlxFRYUkKS4uTm+88Ya6deumwYMH691339XPP/9s8+8EXC6K6EAtCwsLU2BgoA4dOlRp2/Lly7Vt2za99957Ve5bv379StOGVFRUKD4+Xu+8846mTJmijz/+WFu3btWWLVsknbnl6ayAgACNGjVKy5cv1/Hjx3Xs2DH97//+rx5//HGHzBf2008/afXq1TZfUvz8/Mxbo8+dP27YsGH6/PPP9fXXX0uSFi9erICAAJvb4H766Sft2rWr0vGCg4NlGIbN8c43bdo0/fWvf9WWLVvUu3dvhYaGqlu3btq+fXuN+nZ2/tSePXvarD/75WXHjh2SpLffflsZGRmaNWuWCgsLdfz4cfP2trKyMh0/flzl5eU1agMAoPaRp89wtzxdEwUFBerRo4d++OEHZWZm6tprr7XZvmjRIn344Yd655139Pjjj+t3v/udHn30UWVkZGjHjh2aO3dunbUVAGA
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 1500x500 with 3 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"from PIL import Image\n",
|
|||
|
"\n",
|
|||
|
"# 加载图像\n",
|
|||
|
"image = Image.open('rice.png').convert('L') # 转换为灰度图像\n",
|
|||
|
"pixels = np.array(image)\n",
|
|||
|
"\n",
|
|||
|
"# 定义灰度级数\n",
|
|||
|
"gray_levels = [64, 128, 256]\n",
|
|||
|
"\n",
|
|||
|
"# 创建直方图\n",
|
|||
|
"fig, axs = plt.subplots(1, 3, figsize=(15, 5))\n",
|
|||
|
"\n",
|
|||
|
"for i, levels in enumerate(gray_levels):\n",
|
|||
|
" # 使用最近邻法将像素值量化到指定灰度级\n",
|
|||
|
" pixels_quantized = np.digitize(pixels, bins=np.linspace(0, 255, levels))\n",
|
|||
|
" # 计算直方图\n",
|
|||
|
" hist, bins = np.histogram(pixels_quantized, bins=levels, range=(0, levels))\n",
|
|||
|
" axs[i].bar(bins[:-1], hist, width=bins[1]-bins[0], align='center')\n",
|
|||
|
" axs[i].set_title(f'Gray Levels: {levels}')\n",
|
|||
|
" axs[i].set_xlabel('Pixel Value')\n",
|
|||
|
" axs[i].set_ylabel('Frequency')\n",
|
|||
|
"\n",
|
|||
|
"plt.tight_layout()\n",
|
|||
|
"plt.show()\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 8,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 1000x500 with 2 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABX+UlEQVR4nO3dfVxUZf7/8fcotyJOAgJSKG6pWZiVpumWouY92uq2VhZZUlmmhUqlWSv1NS3dzFbLbtbUvEm3Vt3KzdIy01XTvMl0y1zDuwK1RBRvAOH6/dGPWUdAYJjDDMzr+XjMo+bMNTPXuTzM+3zOOXONzRhjBAAAAAAA3K6WpzsAAAAAAEBNRdENAAAAAIBFKLoBAAAAALAIRTcAAAAAABah6AYAAAAAwCIU3QAAAAAAWISiGwAAAAAAi1B0AwAAAABgEYpuAAAAAAAsQtENrzJnzhzZbDZ9/fXXJT6emJiouLg4p2VxcXG69957K/Q+69evV1pamo4fP+5aR33Q4sWLdfXVVys4OFg2m03bt2+/aPvvvvtO9957rxo1aqSAgABFRESod+/e+vjjjyv0vkXbxL59+yrc53379slms2nOnDkVfm5F3HvvvcW2y9La1a1b19K+AIBVyGjvVdGMlqQPPvhANptN4eHhys3NLfd7ffHFF7LZbPriiy8cy8qbg65auHChpk2bZslrl3cbtdlsGj58uCV9QM1H0Y1qb+nSpXrmmWcq9Jz169fr2WefJdDL6ejRo0pKStLll1+uFStWaMOGDWrWrFmp7ZcsWaLrrrtOmzZt0jPPPKNVq1Zp5syZkqTevXvriSeeKPd79+nTRxs2bFDDhg0r3O+GDRtqw4YN6tOnT4WfCwCoPDLaehXN6CKzZs2SJB07dkzLli2rVB+eeeYZLV26tFKvcTFWFt1AVfDzdAeAyrruuus83YUKy8/Pl81mk59f9fgT/OGHH5Sfn6+7775bnTp1umjbvXv3KikpSS1bttQXX3yhkJAQx2N/+tOf9PDDD2vKlCm6/vrrdccdd5T6OmfOnFFQUJAaNGigBg0auNTvwMBA3XjjjS49FwBQeWS09SqS0UUyMzP1r3/9S126dNH69es1a9Ys3X777S734fLLL3f5uYAv4Ew3qr0LLwsqLCzUhAkT1Lx5cwUHB+uSSy7RNddco1deeUWSlJaWpscff1yS1KRJE9lsNqfLpAoLCzV58mRdeeWVCgwMVGRkpO655x4dOnTI6X2NMZo4caIaN26soKAgtWnTRitXrlRCQoISEhIc7Youw5o3b55Gjx6tSy+9VIGBgfrvf/+ro0ePatiwYbrqqqtUt25dRUZGqkuXLlq7dq3TexVdJj1lyhS9+OKLiouLU3BwsBISEhxhO2bMGMXExMhut6t///46cuRIucbvgw8+UPv27VWnTh2FhoaqW7du2rBhg+Pxe++9VzfddJMk6fbbb5fNZnNavwu9/PLLOn36tKZPn+5UcBd56aWXdMkll+j55593LCu6ZPHTTz/VkCFD1KBBA9WpU0e5ubklXl5e3rEv6fLytLQ02Ww27dq1S3feeafsdruioqI0ZMgQZWdnO/X11VdfVceOHRUZGamQkBC1bNlSkydPVn5+frnGtjzi4uKUmJiojz76SNddd52Cg4PVokULffTRR46xadGihUJCQtS2bdtil3V+/fXXuuOOOxzbRFxcnO68807t37+/2HutW7dO7du3V1BQkC699FI988wz+tvf/lbi5fuLFy9W+/btFRISorp166pHjx7atm2b29YbgG8go70ro4vMnTtX586d08iRIzVgwAB99tlnJebG999/r549e6pOnTqKiIjQQw89pJMnTxZrd+Hl5Rf7epfNZlNaWprj/tGjR/Xggw8qNjZWgYGBatCggX7/+99r1apVkqSEhAQtX75c+/fvd2wPNpvN8fy8vDxNmDDBsU00aNBA9913n44ePer0vvn5+XriiScUHR2tOnXq6KabbtKmTZvKHKvSFG07Cxcu1JNPPqmGDRuqbt266tu3rw4fPqyTJ0/qwQcfVEREhCIiInTfffcpJyfH6TXKu59R3u1Zkk6cOKHU1FQ1adJEAQEBuvTSS5WSkqJTp065vK6ovOpxCA8+p6CgQOfOnSu23BhT5nMnT56stLQ0Pf300+rYsaPy8/P1/fffOy5Tu//++3Xs2DFNnz5dS5YscVy2fNVVV0mSHn74Yb355psaPny4EhMTtW/fPj3zzDP64osvtHXrVkVEREiSxo0bp0mTJunBBx/UgAEDdPDgQd1///3Kz88v8bKusWPHqn379nr99ddVq1YtRUZGOgJh/Pjxio6OVk5OjpYuXaqEhAR99tlnxT5IX331VV1zzTV69dVXdfz4cY0ePVp9+/ZVu3bt5O/vr7ffflv79+9Xamqq7r//fn3wwQcXHauFCxfqrrvuUvfu3fXuu+8qNzdXkydPdrz/TTfdpGeeeUZt27bVI488ookTJ6pz586qV69eqa+5cuVKRUVFlXqGuU6dOurevbv+/ve/KzMzU9HR0Y7HhgwZoj59+mjevHk6deqU/P39S3yNio59Sf74xz/q9ttvV3Jysr799luNHTtWkvT222872uzdu1eDBg1yBNc333yj559/Xt9//71Tu8r65ptvNHbsWI0bN052u13PPvusBgwYoLFjx+qzzz7TxIkTZbPZ9OSTTyoxMVHp6ekKDg6W9NuOTfPmzXXHHXcoLCxMGRkZmjlzpm644Qb95z//cWyvO3bsULdu3dSsWTPNnTtXderU0euvv6758+cX68/EiRP19NNP67777tPTTz+tvLw8TZkyRTfffLM2bdrk+FsB4JvI6Oqb0UXefvttNWzYUL169VJwcLAWLlyoOXPmaPz48Y42hw8fVqdOneTv76/XXntNUVFRWrBggdu/15yUlKStW7fq+eefV7NmzXT8+HFt3bpVv/76qyTptdde04MPPqi9e/cWu4S9sLBQt956q9auXasnnnhCHTp00P79+zV+/HglJCTo66+/duTlAw88oHfeeUepqanq1q2bdu7cqQEDBpR4EKEinnrqKXXu3Flz5szRvn37lJqaqjvvvFN+fn5q1aqV3n33XW3btk1PPfWUQkND9de//tXx3PLuZ5R3ez59+rQ6deqkQ4cO6amnntI111yjXbt26c9//rO+/fZbrVq1yumABaqQAbzI7NmzjaSL3ho3buz0nMaNG5vBgwc77icmJpprr732ou8zZcoUI8mkp6c7Lf/uu++MJDNs2DCn5V999ZWRZJ566iljjDHHjh0zgYGB5vbbb3dqt2HDBiPJdOrUybFs9erVRpLp2LFjmet/7tw5k5+fb7p27Wr69+/vWJ6enm4kmVatWpmCggLH8mnTphlJpl+/fk6vk5KSYiSZ7OzsUt+roKDAxMTEmJYtWzq95smTJ01kZKTp0KFDsXV47733ylyHoKAgc+ONN160zZNPPmkkma+++soY879/93vuuadY26LHiv6tKjL2ReM2e/Zsx7Lx48cbSWby5MlOzx82bJgJCgoyhYWFJfa5oKDA5Ofnm3feecfUrl3bHDt2zPHY4MGDi22XJRk8eLAJCQlxWta4cWMTHBxsDh065Fi2fft2I8k0bNjQnDp1yrF82bJlRpL54IMPSn2Pc+fOmZycHBMSEmJeeeUVx/I//elPJiQkxBw9etRpna666iqn8T1w4IDx8/MzI0aMcHrdkydPmujoaDNw4MAy1xNAzURGV/+MNsaYL7/80kgyY8aMMcYYU1hYaJo0aWIaN27slIFPPvmksdlsZvv27U7P79atm5FkVq9e7Vh2YQ6WlL9FJJnx48c77tetW9ekpKRctM99+vQpMWffffddI8n84x//cFq+efNmI8m89tprxpj/bTsjR450ardgwQIjyWkbLY0k88gjjzjuF4173759ndoV/fs++uijTsv/8Ic/mLCwsFJfv7T9jIpsz5MmTTK1atUymzdvdmr7/vvvG0nmX//6V5nrCWtweTm80jvvvKPNmzcXuxVdQnUxbdu21TfffKNhw4bpk08+0YkTJ8r9vqt
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 1000x500 with 2 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from skimage import data, exposure, io\n",
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"\n",
|
|||
|
"# 加载示例图像(由于用户没有上传图像,我们将使用skimage内置的示例图像)\n",
|
|||
|
"image = io.imread('rice.png')\n",
|
|||
|
"\n",
|
|||
|
"# 调整图像的灰度范围\n",
|
|||
|
"def imadjust(I, low_in, high_in, low_out, high_out):\n",
|
|||
|
" return exposure.rescale_intensity(I, in_range=(low_in, high_in), out_range=(low_out, high_out))\n",
|
|||
|
"\n",
|
|||
|
"# 设置灰度范围的低端和高端\n",
|
|||
|
"low_in, high_in = 40, 210\n",
|
|||
|
"low_out, high_out = 0, 255\n",
|
|||
|
"\n",
|
|||
|
"# 调整图像灰度范围\n",
|
|||
|
"adjusted_image = imadjust(image, low_in, high_in, low_out, high_out)\n",
|
|||
|
"\n",
|
|||
|
"# 绘制原始图像和调整后的图像\n",
|
|||
|
"fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))\n",
|
|||
|
"ax1.imshow(image, cmap='gray')\n",
|
|||
|
"ax1.set_title('Original Image')\n",
|
|||
|
"ax1.axis('off')\n",
|
|||
|
"\n",
|
|||
|
"ax2.imshow(adjusted_image, cmap='gray')\n",
|
|||
|
"ax2.set_title('Adjusted Image')\n",
|
|||
|
"ax2.axis('off')\n",
|
|||
|
"\n",
|
|||
|
"# 绘制直方图\n",
|
|||
|
"fig, axs = plt.subplots(1, 2, figsize=(10, 5))\n",
|
|||
|
"axs[0].hist(image.ravel(), 256, [0, 256])\n",
|
|||
|
"axs[0].set_title('Histogram of Original Image')\n",
|
|||
|
"axs[0].set_xlabel('Pixel Value')\n",
|
|||
|
"axs[0].set_ylabel('Frequency')\n",
|
|||
|
"\n",
|
|||
|
"axs[1].hist(adjusted_image.ravel(), 256, [0, 256])\n",
|
|||
|
"axs[1].set_title('Histogram of Adjusted Image')\n",
|
|||
|
"axs[1].set_xlabel('Pixel Value')\n",
|
|||
|
"axs[1].set_ylabel('Frequency')\n",
|
|||
|
"\n",
|
|||
|
"plt.tight_layout()\n",
|
|||
|
"plt.show()\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 13,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABCYAAANVCAYAAACkuv/eAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9eZikZXk1fqq79upl9g2GAZQMIOACKCMEEGVHEnFBSRATFFeMAX4qIirmQxTiwqUG/AyiokaTuMTlkwgqJH6ACBEUBURgYIaZ6emZ6bX2qq7fH/Odp89791MzPYiOtPe5rr66u+p9n/fZaqbPec5936lOp9OBw+FwOBwOh8PhcDgcDsduQM/u7oDD4XA4HA6Hw+FwOByOP124MOFwOBwOh8PhcDgcDodjt8GFCYfD4XA4HA6Hw+FwOBy7DS5MOBwOh8PhcDgcDofD4dhtcGHC4XA4HA6Hw+FwOBwOx26DCxMOh8PhcDgcDofD4XA4dhtcmHA4HA6Hw+FwOBwOh8Ox2+DChMPhcDgcDofD4XA4HI7dBhcmHA6Hw+FwOBwOh8PhcOw2uDCxm3HHHXfgla98JZYvX45sNotly5bhFa94BW6//fZdaucDH/gAUqnUk+rDLbfcglQqhVtuueVJ3T9bHHvssTj22GNndd1BBx30e+2Lw+FwOByO3YPPf/7zSKVSuOuuu6Lvn3baadh7770Tr+2999543etet0vPue222/CBD3wAo6OjT66jf4L42te+hmc961koFApIpVK45557dnj9/fffj9e97nXYa6+9kM1msWjRIpxyyin4/ve/v0vP5Z5Yu3btLvd57dq1SKVS+PznP7/L9+4KXve6183Yl92u6+vr+732xeGYi3BhYjfik5/8JI488kisX78eV155JW6++Wb84z/+I5544gkcddRR+NSnPjXrtl7/+tfvsphBPO95z8Ptt9+O5z3veU/qfofD4XA4HI7fJ775zW/i0ksv3aV7brvtNlx22WUuTMwSw8PDOPvss/GMZzwDN954I26//Xb82Z/9Wdfrv/GNb+C5z30u7rzzTlx66aW4+eabcc011wAATjnlFLzzne+c9bNPPfVU3H777Vi+fPku93v58uW4/fbbceqpp+7yvQ6H448H6d3dgT9V/N//+3/xjne8A6eccgq++c1vIp2eXopXv/rVeNnLXoa/+7u/w3Of+1wceeSRXdupVCooFovYc889seeeez6pvgwMDOCII454Uvc6HA6Hw+Fw/L7x3Oc+d3d3YZfRbDaRSqUSf+P9MeM3v/kNms0m/vqv/xrHHHPMDq99+OGHcfbZZ+Pggw/GLbfcglKpFN575StfiTe/+c246qqr8LznPQ+vfvWru7ZTrVaRz+exePFiLF68+En1O5fL+d+xDsccgDsmdhOuuOIKpFIpXHPNNTP+w0qn0/inf/onpFIpfPjDHw6vM1zjf/7nf/CKV7wC8+fPxzOe8YzEe4p6vY4LL7wQy5YtQ7FYxNFHH4277757hh0yFspBG9pvf/tbnHLKKejr68PKlStx4YUXol6vJ55z2WWX4QUveAEWLFiAgYEBPO95z8N1112HTqfzFM0WkEql8La3vQ3XX389Vq9ejUKhgMMOOwx33HEHOp0OrrrqKuyzzz7o6+vDcccdh9/+9reJ+2+66Sb8xV/8Bfbcc0/k83k885nPxBvf+EZs2bJlxrP+4z/+A4cccghyuRz23XdfXH311dH57XQ6+Kd/+ic85znPQaFQwPz58/GKV7wCjzzyyFM2bofD4XA4HDNDOaampvC//tf/Cn8TzJs3D4cccgiuvvpqANv/Lvr//r//DwCwzz77IJVKJf7WmZqawpVXXon9998fuVwOS5YswWtf+1qsX78+8dxOp4MPfehDWLVqFfL5PA477DDcdNNNM8JT+bfUDTfcgAsvvBB77LEHcrkcfvvb32J4eBhvectbcOCBB6Kvrw9LlizBcccdh//+7/9OPIshCVdddRU+8pGPYO+990ahUMCxxx4bRIN3v/vdWLFiBQYHB/Gyl70MmzdvntX8ffvb38aaNWtQLBbR39+P448/PuG0fd3rXoejjjoKAHDmmWcilUrtMPz24x//OCqVCj75yU8mRAniox/9KObNm4fLL788vMZwjR/84Af427/9WyxevBjFYhH1ej0ayjHbuY+FcvDvtl/96ld4zWteg8HBQSxduhR/+7d/i7GxsURfP/3pT+Poo4/GkiVLUCqVcPDBB+PKK69Es9mc1dzOBnvvvTdOO+00fPe738Vzn/tcFAoFHHDAAfjud78b5uaAAw5AqVTC85///BlhTnfddRde/epXhz2x99574zWveQ0ee+yxGc/6yU9+gjVr1iCfz2OPPfbApZdein/+53+Ohsp87Wtfw5o1a1AqldDX14cTTzwRP//5z5+ycTscu4Knh4Q7x9But/HjH/8Yhx12WFeXw8qVK3HooYfiRz/6EdrtNnp7e8N7Z5xxBl796lfjTW96E8rlctfn/M3f/A2+9rWv4Z3vfCeOO+44/PrXv8bLXvYyjI+Pz6qfzWYTp59+Os4991xceOGF+K//+i/8wz/8AwYHB/G+970vXLd27Vq88Y1vxF577QVge96M888/H0888UTiut8V3/3ud/Hzn/8cH/7wh5FKpfCud70Lp556Ks455xw88sgj+NSnPoWxsTFccMEFePnLX4577rkniAkPP/ww1qxZg9e//vUYHBzE2rVr8bGPfQxHHXUUfvnLXyKTyQAAbrzxRpxxxhk4+uij8bWvfQ2tVgv/+I//iKGhoRn9eeMb34jPf/7zePvb346PfOQj2LZtGz74wQ/ihS98Ie69914sXbr0KRu7w+FwOBxzDe12G61Wa8brsznYuPLKK/GBD3wA733ve3H00Uej2WzigQceCGEbr3/967Ft2zZ88pOfxDe+8Y0QInDggQcCAN785jfjf//v/423ve1tOO2007B27VpceumluOWWW/A///M/WLRoEQDgkksuwRVXXIHzzjsPZ5xxBtatW4fXv/71aDab0TCHiy++GGvWrMG1116Lnp4eLFmyBMPDwwCA97///Vi2bBkmJyfxzW9+E8ceeyx++MMfzhAAPv3pT+OQQw7Bpz/9aYyOjuLCCy/ES1/6UrzgBS9AJpPB5z73OTz22GO46KKL8PrXvx7f/va3dzhXX/nKV/BXf/VXOOGEE/Av//IvqNfruPLKK8PzjzrqKFx66aV4/vOfj7e+9a340Ic+hBe96EUYGBjo2uZNN92EpUuXdnUqFItFnHDCCfjXf/1XbNq0CcuWLQvv/e3f/i1OPfVU3HDDDSiXy+FvMItdnfsYXv7yl+PMM8/Eueeei1/+8pe4+OKLAQCf+9znwjUPP/wwzjrrLOyzzz7IZrO49957cfnll+OBBx5IXPe74t5778XFF1+MSy65BIODg7jssstwxhln4OKLL8YPf/hDfOhDHwp/35522ml49NFHUSgUAGz/W3v16tV49atfjQULFmDjxo245pprcPjhh+PXv/512K+/+MUvcPzxx+PP/uzP8IUvfAHFYhHXXnstvvSlL83oz4c+9CG8973vxd/8zd/gve99LxqNBq666ir8+Z//Oe68887wWXE4/mDoOP7g2LRpUwdA59WvfvUOrzvzzDM7ADpDQ0OdTqfTef/7398B0Hnf+94341q+R/zqV7/qAOi8613vSlz3L//yLx0AnXPOOSe89uMf/7gDoPPjH/84vHbOOed0AHT+9V//NXH/Kaec0lm9enXXPrfb7U6z2ex88IMf7CxcuLAzNTUV3jvmmGM6xxxzzA7HzOue9axnJV4D0Fm2bFlncnIyvPatb32rA6DznOc8J/GcT3ziEx0AnV/84hfR9qempjrNZrPz2GOPdQB0/uM//iO8d/jhh3dWrlzZqdfr4bWJiYnOwoULE/N7++23dwB0PvrRjybaXrduXadQKHTe+c537nScDofD4XD8KeL666/vANjh16pVqxL3rFq1KvG3y2mnndZ5znOes8PnXHXVVR0AnUcffTTx+v33398B0HnLW96SeP2nP/1
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 1500x1000 with 4 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 1500x1000 with 4 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import cv2\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"\n",
|
|||
|
"# 绘制直方图\n",
|
|||
|
"def plot_histogram(image, title):\n",
|
|||
|
" plt.hist(image.ravel(), 256, [0, 256])\n",
|
|||
|
" plt.title(title)\n",
|
|||
|
" plt.xlabel('Pixel Intensity')\n",
|
|||
|
" plt.ylabel('Frequency')\n",
|
|||
|
"\n",
|
|||
|
"# 显示图像\n",
|
|||
|
"def display_image(image, title):\n",
|
|||
|
" plt.imshow(image, cmap='gray')\n",
|
|||
|
" plt.title(title)\n",
|
|||
|
" plt.axis('off')\n",
|
|||
|
"\n",
|
|||
|
"# 图像路径\n",
|
|||
|
"image_paths = ['pout.tif', 'tire.tif']\n",
|
|||
|
"\n",
|
|||
|
"for image_path in image_paths:\n",
|
|||
|
" # 加载图像\n",
|
|||
|
" image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)\n",
|
|||
|
"\n",
|
|||
|
" # 直方图均衡化\n",
|
|||
|
" equalized_image = cv2.equalizeHist(image)\n",
|
|||
|
"\n",
|
|||
|
" # 绘制原图像和直方图\n",
|
|||
|
" plt.figure(figsize=[15, 10])\n",
|
|||
|
" plt.subplot(2, 2, 1)\n",
|
|||
|
" display_image(image, 'Original Image')\n",
|
|||
|
" plt.subplot(2, 2, 2)\n",
|
|||
|
" plot_histogram(image, 'Histogram of Original Image')\n",
|
|||
|
"\n",
|
|||
|
" # 绘制处理后的图像和直方图\n",
|
|||
|
" plt.subplot(2, 2, 3)\n",
|
|||
|
" display_image(equalized_image, 'Equalized Image')\n",
|
|||
|
" plt.subplot(2, 2, 4)\n",
|
|||
|
" plot_histogram(equalized_image, 'Histogram of Equalized Image')\n",
|
|||
|
"\n",
|
|||
|
" # 显示结果\n",
|
|||
|
" plt.show()\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 18,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
|
|||
|
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAC/CAYAAADKHUDNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9e7BtV1Um/o05197nnPvMTULeJDwSeROQGB7akKA0IiBqUxQooqho+aC1uyyr2pYGurqUVrvKbgW7q220FVEs20YEfnQpxEarg0YbOoA8giQkgXDzujf3dc7ea845fn+MMeYca5197r0ImBNdo3Kzz95rrbnme8xvfmOMSczMmGSSSSaZZJJJJplkkkkmmWSSh6iEBzsDk0wyySSTTDLJJJNMMskkk0zy5cgEbCeZZJJJJplkkkkmmWSSSSZ5SMsEbCeZZJJJJplkkkkmmWSSSSZ5SMsEbCeZZJJJJplkkkkmmWSSSSZ5SMsEbCeZZJJJJplkkkkmmWSSSSZ5SMsEbCeZZJJJJplkkkkmmWSSSSZ5SMsEbCeZZJJJJplkkkkmmWSSSSZ5SMsEbCeZZJJJJplkkkkmmWSSSSZ5SMsEbCeZZJJJJplkkkkmmWSSSSZ5SMsEbL9K8oY3vAFEhHvvvfcrluYv//Iv48orr8R8PgcR4ejRo1+xtCeZZJKvnnz4wx/Gc57zHBw8eBBEhF/6pV/Ce9/7XrzhDW94sLM2ySST/B3luuuuw3XXXfcVS+8Rj3gEiKj+27t3L772a78Wv/IrvwJm/oq9Z5JJ/jHKb/zGbwzGV9d1uPjii/Hyl78ct9xyy7b7Syl429vehuc///m44IILMJvNcM455+AZz3gGfvEXf/Erur6f5CsnE7B9iMhHPvIR/PN//s9x/fXX4wMf+ABuvPFG7N+//8HO1iSTTHIW8n3f932466678Lu/+7u48cYb8fKXvxzvfe978cY3vvHBztokk0yyi+Trv/7rceONN+LGG2/Eb/3Wb2HPnj147Wtfi5/7uZ97sLM2yST/IOTXf/3XceONN+JP/uRP8GM/9mN417vehW/4hm/AkSNH6j2bm5v45m/+ZrzqVa/Cueeei//0n/4T3v/+9+Ntb3sbnvvc5+IXfuEX8O3f/u0PYikm2Um6BzsDk5ydfPzjHwcAvOY1r8G11177FUnz1KlT2LNnz1ckrUkmmWRn+djHPobXvOY1eMELXvBVf9c0rieZ5KErxgiZfNM3fRMuv/xy/Jf/8l/w0z/90w9iziaZ5B+GPPGJT8Q111wDQKwucs54/etfj3e+85149atfDQD4iZ/4CfzxH/8x3v72t+MVr3jF4PkXvehF+Jmf+Rn89m//9t973ic5s0yM7VdZ7rjjDnzHd3wHDhw4gIMHD+KVr3wl7rnnnsE973jHO/DMZz4Te/fuxb59+/D85z8fH/7wh+v16667Dq985SsBAE9/+tNBRPje7/3eev2tb30rrr76aqyvr+Pcc8/Ft3/7t+MTn/jE4B3f+73fi3379uGjH/0o/uk//afYv38/vvEbvxEAsFwu8e/+3b/DYx/7WKytreFhD3sYXv3qV2/L5ySTTNLkM5/5DF796lfjqquuwp49e3DppZfixS9+MT760Y/We8z0KaWEX/3VX60mUN/7vd+LN7/5zQAwMI267bbbAADMjLe85S14ylOego2NDRw6dAgvfelL8dnPfnaQh+uuuw5PfOIT8cEPfhDPetazsGfPHnzf933f31sdTDLJQ0n+/M//HN/4jd+I/fv3Y8+ePXjWs56F97znPYN7bMzecMMN+OEf/mGcf/75OO+88/Ad3/Ed+MIXvrBj2syMq666Cs9//vO3XTtx4gQOHjyIH/3RH/2S83zgwAF8zdd8DQ4fPvwlPzvJJJOcWQzk2hi766678Na3vhUvfOELt4Fakz179uA1r3nN31seJzl7mYDtV1m+/du/HVdeeSV+//d/H294wxvwzne+E89//vPR9z0A4Gd/9mfxile8Ao9//OPxe7/3e/it3/otHD9+HP/kn/wT/M3f/A0A4C1veQt+5md+BkAzoXjd614HAPi5n/s5fP/3fz+e8IQn4A/+4A/wH//jf8TNN9+MZz7zmdt8BpbLJb71W78Vz33uc/GHf/iHeOMb34hSCl7ykpfgTW96E77zO78T73nPe/CmN70Jf/zHf4zrrrsOm5ubf4+1NckkDx35whe+gPPOOw9vetOb8L73vQ9vfvOb0XUdnv70p+NTn/oUAOCFL3whbrzxRgDAS1/60mpi+LrXvQ4vfelLAaD+duONN+Liiy8GAPzQD/0QfuInfgLf9E3fhHe+8514y1vego9//ON41rOetW2Be9ddd+GVr3wlvvM7vxPvfe978SM/8iN/j7UwySQPDfnf//t/47nPfS4eeOAB/Lf/9t/wO7/zO9i/fz9e/OIX4x3veMe2+3/gB34As9kMb3/72/HzP//z+NM//dO6wbxKiAivfe1r8cd//MfbdO9v/uZv4tixY38nYJtSwh133IGv+Zqv+ZKfnWSSSc4st956KwDUMXbDDTcgpYRv/dZvfTCzNcnfVXiSr4q8/vWvZwD8L/7Fvxj8/tu//dsMgN/2trfx7bffzl3X8Wtf+9rBPcePH+eLLrqIX/ayl9Xffv3Xf50B8E033VR/O3LkCG9sbPC3fMu3DJ6//fbbeW1tjb/zO7+z/vY93/M9DIDf+ta3Du79nd/5HQbA/+N//I/B7zfddBMD4Le85S1/twqYZJJ/ZJJS4uVyyVddddW2cQ+Af/RHf3Tw24/+6I/yqin4xhtvZAD8H/7Dfxj8fscdd/DGxgb/1E/9VP3tOc95DgPg97///V/BkkwyyT88ecYznsEXXHABHz9+vP6WUuInPvGJfNlll3EphZmbrv2RH/mRwfM///M/zwD4rrvuqr895znP4ec85zn1+7Fjx3j//v384z/+44NnH//4x/P1119/xjxeccUV/C3f8i3c9z33fc+f+9zn+DWveQ3PZjN+97vf/Xco9SSTTGJiY/tDH/oQ933Px48f5/e973180UUX8bOf/Wzu+56Zmd/0pjcxAH7f+963LQ0bm/Zvkt0nE2P7VZbv+q7vGnx/2ctehq7rcMMNN+B//a//hZQSXvWqVyGlVP+tr6/jOc95Dv70T//0tGnfeOON2NzcHJglA8DDH/5wPPe5z8X73//+bc/8s3/2zwbf3/3ud+Occ87Bi1/84kEenvKUp+Ciiy46Yx4mmeQfq6SU8LM/+7N4/OMfj/l8jq7rMJ/Pccstt2xzBfhS5N3vfjeICK985SsHY/Kiiy7C1VdfvW1MHjp0CM997nO/zNJMMsk/XDl58iT+4i/+Ai996Uuxb9+++nuMEd/93d+NO++8s1pZmIzZmic/+ckAgM997nM7vmf//v149atfjd/4jd/AyZMnAQAf+MAH8Dd/8zf4sR/7sbPK63vf+17MZjPMZjNcccUV+K//9b/il3/5l/HCF77wrJ6fZJJJTi/PeMYzMJvNsH//fnzzN38zDh06hD/8wz9E150+7NBHPvKROjbt3xQZeffJBGy/ynLRRRcNvnddh/POOw/33XdfNSn8uq/7um2D5R3veMcZB8x9990HANV80csll1xSr5vs2bMHBw4cGPx2+PBhHD16FPP5fFsevvjFL06DdpJJdpB/+S//JV73utfh277t2/BHf/RH+Iu/+AvcdNNNuPrqq78sE/7Dhw+DmXHhhRduG5Mf+tCHto3JVeN/kkkmaXLkyBEw8466EsA2fXneeecNvq+trQHAGcf2a1/7Whw/frwGlvmVX/kVXHbZZXjJS15yVnn9hm/4Btx000340Ic+hN/6rd/CIx7xCPzYj/0Y/vzP//ysnp9kkklOL7/5m7+Jm266CR/4wAfwQz/0Q/jEJz4x8KW9/PLLAWzfxHrMYx6Dm266CTfddNPkX7uLZYqK/FWWL37xi7j00kvr95QS7rvvPpx33nk4//zzAQC///u/jyuuuOJLTtsU71133bXt2he+8IWavgkRbbvPAmO8733vW/mO6UihSSZZLW9729vwqle
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 1200x600 with 4 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from PIL import Image\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"from skimage.exposure import equalize_hist\n",
|
|||
|
"\n",
|
|||
|
"# 读取彩色图像\n",
|
|||
|
"image_path = 'DJI_0049.JPG'\n",
|
|||
|
"image = Image.open(image_path)\n",
|
|||
|
"image = np.array(image)\n",
|
|||
|
"\n",
|
|||
|
"# 分离RGB通道\n",
|
|||
|
"R, G, B = image[:, :, 0], image[:, :, 1], image[:, :, 2]\n",
|
|||
|
"\n",
|
|||
|
"# 对每个通道进行直方图均衡化\n",
|
|||
|
"R_equalized = equalize_hist(R)\n",
|
|||
|
"G_equalized = equalize_hist(G)\n",
|
|||
|
"B_equalized = equalize_hist(B)\n",
|
|||
|
"\n",
|
|||
|
"# 合并均衡化后的通道\n",
|
|||
|
"image_equalized = np.dstack([R_equalized, G_equalized, B_equalized])\n",
|
|||
|
"\n",
|
|||
|
"# 显示原图和均衡化后的图像\n",
|
|||
|
"fig, ax = plt.subplots(1, 4, figsize=(12, 6))\n",
|
|||
|
"ax[0].imshow(image)\n",
|
|||
|
"ax[0].axis('off')\n",
|
|||
|
"ax[0].set_title('before')\n",
|
|||
|
"\n",
|
|||
|
"ax[1].imshow(np.dstack([R_equalized, G_equalized, B_equalized]))\n",
|
|||
|
"ax[1].axis('off')\n",
|
|||
|
"ax[1].set_title('after')\n",
|
|||
|
"\n",
|
|||
|
"ax[2].imshow(np.dstack([R_equalized, G, B]))\n",
|
|||
|
"ax[2].axis('off')\n",
|
|||
|
"ax[2].set_title('only R')\n",
|
|||
|
"\n",
|
|||
|
"ax[3].imshow(np.dstack([R_equalized, G_equalized, B]))\n",
|
|||
|
"ax[3].axis('off')\n",
|
|||
|
"ax[3].set_title('RG')\n",
|
|||
|
"\n",
|
|||
|
"# ax[4].imshow(np.dstack([R, G, B]))\n",
|
|||
|
"# ax[4].axis('off')\n",
|
|||
|
"# ax[4].set_title('only B')\n",
|
|||
|
"\n",
|
|||
|
"plt.show()\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 24,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
|
|||
|
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAC/CAYAAADKHUDNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9edxkRXX//z51b6/PNsPMwAyrCwICAq64g7jgrighqATENXGJJiYaoygkcYnR/EyMRBODCi5ojKLi9hXFHRURRAEFBGTfZn227r731vn9cer2re6nn5kRQQbtz+t5Xt19b93a65761Dl1SlRVGWOMMcYYY4wxxhhjjDHGGGOMeyjc3Z2BMcYYY4wxxhhjjDHGGGOMMcb4XTAmtmOMMcYYY4wxxhhjjDHGGGPcozEmtmOMMcYYY4wxxhhjjDHGGGPcozEmtmOMMcYYY4wxxhhjjDHGGGPcozEmtmOMMcYYY4wxxhhjjDHGGGPcozEmtmOMMcYYY4wxxhhjjDHGGGPcozEmtmOMMcYYY4wxxhhjjDHGGGPcozEmtmOMMcYYY4wxxhhjjDHGGGPcozEmtmOMMcYYY4wxxhhjjDHGGGPcozEmtncRTj75ZESE22+//U6L833vex9777039XodEWHTpk13WtxjjDHGXYcLL7yQww47jJmZGUSE9773vXz5y1/m5JNPvruzNsYYY9xBHH744Rx++OF3Wnz3ute9EJH+/8TEBA960IP4j//4D1T1TktnjDH+GPGRj3xkYHylacq6des49thjueKKK5aE997zsY99jCOPPJKdd96ZWq3GihUrePjDH8673/3uO3V+P8adhzGxvYfgoosu4i//8i953OMexze/+U3OO+88pqam7u5sjTHGGNuBF73oRdx0002ceeaZnHfeeRx77LF8+ctf5pRTTrm7szbGGGPsQHjUox7Feeedx3nnnccZZ5xBu93m1a9+Ne94xzvu7qyNMcYfBD784Q9z3nnncc455/CqV72KL3zhCzz60Y9m48aN/TCLi4s8+clP5vjjj2ennXbi3//93/nGN77Bxz72MY444gj+5V/+haOOOupuLMUYyyG9uzMwxvbhkksuAeClL30pD3vYw+6UOBcWFmi323dKXGOMMcby+MUvfsFLX/pSnvKUp9zlaY3H9Rhj3HNRaoRKPOEJT2DPPffkgx/8IH//939/N+ZsjDH+MHDggQfykIc8BDCri6IoeOtb38pZZ53FiSeeCMBrX/tavv71r/OJT3yC5z3veQPPP/3pT+fNb34zH//4x3/veR9j2xhrbO9iXHfddTznOc9henqamZkZjjvuOG677baBMJ/61Kd4xCMewcTEBJOTkxx55JFceOGF/fuHH344xx13HACHHnooIsILX/jC/v3TTjuNgw8+mGazyU477cRRRx3FZZddNpDGC1/4QiYnJ/n5z3/Ok570JKampnj84x8PQK/X45/+6Z/Yb7/9aDQarFmzhhNPPHFJPscYY4wKV155JSeeeCL3u9/9aLfb7LbbbjzjGc/g5z//eT9MafqU5zn/+Z//2TeBeuELX8j73/9+gAHTqGuuuQYAVeXUU0/lkEMOodVqsXLlSo4++miuuuqqgTwcfvjhHHjggXznO9/hkY98JO12mxe96EW/tzoYY4x7Er73ve/x+Mc/nqmpKdrtNo985CP50pe+NBCmHLPnnnsuf/EXf8Hq1atZtWoVz3nOc7jxxhuXjVtVud/97seRRx655N7c3BwzMzO88pWv/K3zPD09zT777MMtt9zyWz87xhhjbBslyS3H2E033cRpp53G0572tCWktkS73ealL33p7y2PY2w/xsT2LsZRRx3F3nvvzWc+8xlOPvlkzjrrLI488kiyLAPg7W9/O8973vPYf//9+fSnP80ZZ5zB7Owsj3nMY7j00ksBOPXUU3nzm98MVCYUJ510EgDveMc7ePGLX8wBBxzAZz/7Wf7t3/6Niy++mEc84hFL9gz0ej2e+cxncsQRR/D5z3+eU045Be89z3rWs3jnO9/J85//fL70pS/xzne+k69//escfvjhLC4u/h5ra4wx7jm48cYbWbVqFe985zv56le/yvvf/37SNOXQQw/lV7/6FQBPe9rTOO+88wA4+uij+yaGJ510EkcffTRA/9p5553HunXrAHj5y1/Oa1/7Wp7whCdw1llnceqpp3LJJZfwyEc+cskE96abbuK4447j+c9/Pl/+8pd5xSte8XushTHGuGfg29/+NkcccQSbN2/mf/7nf/jkJz/J1NQUz3jGM/jUpz61JPxLXvISarUan/jEJ3jXu97Ft771rf4C8yiICK9+9av5+te/vkT2nn766WzZsuUOEds8z7nuuuvYZ599futnxxhjjG3j6quvBuiPsXPPPZc8z3nmM595d2ZrjDsKHeMuwVvf+lYF9K/+6q8Grn/84x9XQD/2sY/ptddeq2ma6qtf/eqBMLOzs7p27Vo95phj+tc+/OEPK6Dnn39+/9rGjRu11WrpU5/61IHnr732Wm00Gvr85z+/f+2EE05QQE877bSBsJ/85CcV0P/7v/8buH7++ecroKeeeuodq4AxxvgjQ57n2uv19H73u9+ScQ/oK1/5yoFrr3zlK3XUK/i8885TQN/znvcMXL/uuuu01Wrp61//+v61ww47TAH9xje+cSeWZIwx/vDw8Ic/XHfeeWednZ3tX8vzXA888EDdfffd1XuvqpWsfcUrXjHw/Lve9S4F9KabbupfO+yww/Swww7r/96yZYtOTU3pa17zmoFn999/f33c4x63zTzutdde+tSnPlWzLNMsy/Q3v/mNvvSlL9VaraZnn332HSj1GGOMUaIc2z/84Q81yzKdnZ3Vr371q7p27Vp97GMfq1mWqarqO9/5TgX0q1/96pI4yrFZ/o+x42Gssb2L8YIXvGDg9zHHHEOappx77rl87WtfI89zjj/+ePI87/83m00OO+wwvvWtb2017vPOO4/FxcUBs2SAPfbYgyOOOIJvfOMbS5557nOfO/D77LPPZsWKFTzjGc8YyMMhhxzC2rVrt5mHMcb4Y0We57z97W9n//33p16vk6Yp9XqdK664YslWgN8GZ599NiLCcccdNzAm165dy8EHH7xkTK5cuZIjjjjidyzNGGP84WJ+fp4f/ehHHH300UxOTvavJ0nCn/3Zn3H99df3rSxKDGtrDjroIAB+85vfLJvO1NQUJ554Ih/5yEeYn58H4Jvf/CaXXnopr3rVq7Yrr1/+8pep1WrUajX22msv/vu//5v3ve99PO1pT9uu58cYY4yt4+EPfzi1Wo2pqSme/OQns3LlSj7/+c+Tplt3O3TRRRf1x2b5P/aMvONhTGzvYqxdu3bgd5qmrFq1ivXr1/dNCh/60IcuGSyf+tSntjlg1q9fD9A3X4yx66679u+XaLfbTE9PD1y75ZZb2LRpE/V6fUkebr755vGgHWOMZfDXf/3XnHTSSTz72c/mi1/8Ij/60Y84//zzOfjgg38nE/5bbrkFVWWXXXZZMiZ/+MMfLhmTo8b/GGOMUWHjxo2o6rKyElgiL1etWjXwu9FoAGxzbL/61a9mdna271jmP/7jP9h999151rOetV15ffSjH83555/PD3/4Q8444wzuda978apXvYrvfe972/X8GGOMsXWcfvrpnH/++Xzzm9/k5S9/OZdddtnAXto999wTWLqIte+++3L++edz/vnnj/fX7sAYe0W+i3HzzTez22679X/nec769etZtWoVq1evBuAzn/kMe+21128ddyl4b7rppiX3brzxxn78JURkSbjSMcZXv/rVkWmMjxQaY4zR+NjHPsbxxx/P29/+9oHrt99+OytWrLjD8a5evRoR4bvf/W5/Mh1j+NqocT3GGGNUWLlyJc65ZWUlsERe3lHsvffePOUpT+H9738/T3nKU/jCF77AKaecQpIk2/X8zMxM35nNoYceyqGHHsrBBx/MK17xCi666CKcG+sjxhjjd8H973///hh73OMeR1EUfOhDH+Izn/kMRx99NIcffjhpmvKFL3yBl73sZf3nWq1W/7m
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 1200x600 with 4 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from PIL import Image\n",
|
|||
|
"import cv2\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"from skimage.exposure import equalize_hist\n",
|
|||
|
"\n",
|
|||
|
"# 读取彩色图像\n",
|
|||
|
"image_path = 'DJI_0049.JPG'\n",
|
|||
|
"image = Image.open(image_path)\n",
|
|||
|
"image = image.convert('HSV')\n",
|
|||
|
"image = np.array(image)\n",
|
|||
|
"\n",
|
|||
|
"# 分离RGB通道\n",
|
|||
|
"H, S, V = image[:, :, 0], image[:, :, 1], image[:, :, 2]\n",
|
|||
|
"\n",
|
|||
|
"# 对每个通道进行直方图均衡化\n",
|
|||
|
"H_equalized = equalize_hist(H)\n",
|
|||
|
"S_equalized = equalize_hist(S)\n",
|
|||
|
"V_equalized = equalize_hist(V)\n",
|
|||
|
"\n",
|
|||
|
"# 合并均衡化后的通道\n",
|
|||
|
"image_equalized = np.dstack([H_equalized, S_equalized, V_equalized])\n",
|
|||
|
"\n",
|
|||
|
"# 显示原图和均衡化后的图像\n",
|
|||
|
"fig, ax = plt.subplots(1, 4, figsize=(12, 6))\n",
|
|||
|
"\n",
|
|||
|
"ax[0].imshow(image)\n",
|
|||
|
"ax[0].axis('off')\n",
|
|||
|
"ax[0].set_title('before')\n",
|
|||
|
"\n",
|
|||
|
"ax[1].imshow(np.dstack([R_equalized, G_equalized, B_equalized]))\n",
|
|||
|
"ax[1].axis('off')\n",
|
|||
|
"ax[1].set_title('after')\n",
|
|||
|
"\n",
|
|||
|
"ax[2].imshow(np.dstack([R_equalized, G, B]))\n",
|
|||
|
"ax[2].axis('off')\n",
|
|||
|
"ax[2].set_title('only R')\n",
|
|||
|
"\n",
|
|||
|
"ax[3].imshow(np.dstack([R_equalized, G_equalized, B]))\n",
|
|||
|
"ax[3].axis('off')\n",
|
|||
|
"ax[3].set_title('RG')\n",
|
|||
|
"\n",
|
|||
|
"# ax[4].imshow(np.dstack([R, G, B]))\n",
|
|||
|
"# ax[4].axis('off')\n",
|
|||
|
"# ax[4].set_title('only B')\n",
|
|||
|
"\n",
|
|||
|
"plt.show()\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"kernelspec": {
|
|||
|
"display_name": "cv_course",
|
|||
|
"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.11.8"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|