注意
前往末尾下載完整的範例程式碼。或透過 Binder 在您的瀏覽器中執行此範例
熵#
在資訊理論中,資訊熵是訊息可能結果數的以 2 為底的對數。
對於影像,局部熵與給定鄰域中包含的複雜性相關,通常由結構元素定義。熵濾鏡可以偵測局部灰階分佈中的細微變化。
在第一個範例中,影像由兩個表面組成,這兩個表面具有兩個略有不同的分佈。影像在影像的中間具有範圍 [-15, +15] 的均勻隨機分佈,在影像邊界具有範圍 [-14, 14] 的均勻隨機分佈,兩者都以 128 的灰階值為中心。為了偵測中心正方形,我們使用半徑足夠大的圓形結構元素計算局部熵度量,以捕捉局部灰階分佈。第二個範例顯示如何使用較小的結構元素偵測相機影像中的紋理。
物件偵測#
import matplotlib.pyplot as plt
import numpy as np
from skimage import data
from skimage.util import img_as_ubyte
from skimage.filters.rank import entropy
from skimage.morphology import disk
rng = np.random.default_rng()
noise_mask = np.full((128, 128), 28, dtype=np.uint8)
noise_mask[32:-32, 32:-32] = 30
noise = (noise_mask * rng.random(noise_mask.shape) - 0.5 * noise_mask).astype(np.uint8)
img = noise + 128
entr_img = entropy(img, disk(10))
fig, (ax0, ax1, ax2) = plt.subplots(nrows=1, ncols=3, figsize=(10, 4))
img0 = ax0.imshow(noise_mask, cmap='gray')
ax0.set_title("Object")
ax1.imshow(img, cmap='gray')
ax1.set_title("Noisy image")
ax2.imshow(entr_img, cmap='viridis')
ax2.set_title("Local entropy")
fig.tight_layout()

紋理偵測#
image = img_as_ubyte(data.camera())
fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(12, 4), sharex=True, sharey=True)
img0 = ax0.imshow(image, cmap=plt.cm.gray)
ax0.set_title("Image")
ax0.axis("off")
fig.colorbar(img0, ax=ax0)
img1 = ax1.imshow(entropy(image, disk(5)), cmap='gray')
ax1.set_title("Entropy")
ax1.axis("off")
fig.colorbar(img1, ax=ax1)
fig.tight_layout()
plt.show()

腳本的總執行時間: (0 分鐘 1.577 秒)