估計模糊強度#

此範例顯示 measure.blur_effect 中實作的指標如何表現,包括模糊強度的函數和重新模糊濾波器的大小。此無參考感知模糊指標在 [1] 中說明。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy.ndimage as ndi

import plotly
import plotly.express as px
from skimage import color, data, measure

產生一系列逐漸模糊的影像#

讓我們載入透過 scikit-image 資料註冊表提供的影像。模糊指標適用於單通道影像。

讓我們使用一系列大小遞增的均勻濾波器來模糊此影像。

blurred_images = [ndi.uniform_filter(image, size=k) for k in range(2, 32, 2)]
img_stack = np.stack(blurred_images)

fig = px.imshow(
    img_stack,
    animation_frame=0,
    binary_string=True,
    labels={'animation_frame': 'blur strength ~'},
)
plotly.io.show(fig)

繪製模糊指標#

讓我們計算所有模糊影像的模糊指標:我們預期它會隨著模糊強度增加而向 1 增加。我們計算三個不同重新模糊濾波器值:3、11(預設值)和 30。

B = pd.DataFrame(
    data=np.zeros((len(blurred_images), 3)),
    columns=['h_size = 3', 'h_size = 11', 'h_size = 30'],
)
for ind, im in enumerate(blurred_images):
    B.loc[ind, 'h_size = 3'] = measure.blur_effect(im, h_size=3)
    B.loc[ind, 'h_size = 11'] = measure.blur_effect(im, h_size=11)
    B.loc[ind, 'h_size = 30'] = measure.blur_effect(im, h_size=30)

B.plot().set(
    xlabel='blur strength (half the size of uniform filter)', ylabel='blur metric'
)

plt.show()
plot blur effect

我們可以看見,一旦模糊程度強於(達到均勻濾波器的大小),指標就會接近 1,因此,隨著模糊強度增加,會漸近地趨近於 1。11 像素的值提供與人類感知最佳相關的模糊指標。這就是為什麼它在感知模糊指標 measure.blur_effect 實作中是預設值的原因。

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

由 Sphinx-Gallery 產生的圖庫