日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python图像锐化_Python图像处理介绍--图像模糊与锐化

發(fā)布時(shí)間:2023/12/2 python 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python图像锐化_Python图像处理介绍--图像模糊与锐化 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎關(guān)注?“小白玩轉(zhuǎn)Python”,發(fā)現(xiàn)更多 “有趣”

引言

在之前的文章中,我們討論了邊緣檢測(cè)內(nèi)核。在本文我們將討論如何在圖像上應(yīng)用模糊與銳化內(nèi)核,將這些內(nèi)核應(yīng)用到彩色圖像上,同時(shí)保留核心圖像。

一如既往,我們從導(dǎo)入所需的python庫開始。

import numpy as np

import matplotlib.pyplot as plt

from skimage.io import imshow, imread

from skimage.color import rgb2yuv, rgb2hsv, rgb2gray, yuv2rgb, hsv2rgb

from scipy.signal import convolve2d

讀取本文將使用的圖像。

dog = imread('fire_dog.png')

plt.figure(num=None, figsize=(8, 6), dpi=80)

imshow(dog);

現(xiàn)在我們應(yīng)用于圖像的內(nèi)核是高斯模糊內(nèi)核和銳化內(nèi)核。

# Sharpen

sharpen = np.array([[0, -1, 0],

[-1, 5, -1],

[0, -1, 0]])

# Gaussian Blur

gaussian = (1 / 16.0) * np.array([[1., 2., 1.],

[2., 4., 2.],

[1., 2., 1.]])

fig, ax = plt.subplots(1,2, figsize = (17,10))

ax[0].imshow(sharpen, cmap='gray')

ax[0].set_title(f'Sharpen', fontsize = 18)

ax[1].imshow(gaussian, cmap='gray')

ax[1].set_title(f'Gaussian Blur', fontsize = 18)

[axi.set_axis_off() for axi in ax.ravel()];

但我們?nèi)绾螌⑦@些內(nèi)核應(yīng)用到我們的圖像中呢?那么,讓我們直接通過卷積來試試。

def multi_convolver(image, kernel, iterations):

for i in range(iterations):

image = convolve2d(image, kernel, 'same', boundary = 'fill',

fillvalue = 0)

return image

multi_convolver(dog, gaussian, 2)

很顯然,我們出現(xiàn)了維數(shù)錯(cuò)誤。當(dāng)我們將一個(gè)矩陣與另一個(gè)矩陣卷積時(shí),它們的維數(shù)應(yīng)該是相同的。因此,我們必須先將圖像轉(zhuǎn)化為灰度。

dog_grey = rgb2gray(dog)

plt.figure(num=None, figsize=(8, 6), dpi=80)

imshow(dog_grey);

現(xiàn)在我們可以運(yùn)行上面的卷積函數(shù)并得到預(yù)期的效果。

convolved_image = multi_convolver(dog_grey, gaussian, 2)

plt.figure(num=None, figsize=(8, 6), dpi=80)

imshow(convolved_image);

我們可以清楚的看到,圖像已經(jīng)模糊了。下面的代碼將告訴我們?nèi)绻^續(xù)運(yùn)行高斯模糊卷積圖像會(huì)發(fā)生什么。

def convolution_plotter(image, kernel):

iterations = [1,10,20,30]

f_size = 20

fig, ax = plt.subplots(1,4, figsize = (15,7))

for n, ax in enumerate(ax.flatten()):

ax.set_title(f'Iteration : {iterations[n]}', fontsize =

f_size)

ax.imshow(multi_convolver(image, kernel, iterations[n]),

cmap='gray')

ax.set_axis_off()

fig.tight_layout()

convolution_plotter(dog_grey, gaussian)

可以看到圖像變得越來越模糊了。

如果需要使圖像模糊并保留顏色怎么辦?讓我們首先嘗試對(duì)每個(gè)顏色通道應(yīng)用卷積。

def convolver_rgb(image, kernel, iterations = 1):

convolved_image_r = multi_convolver(image[:,:,0], kernel,

iterations)

convolved_image_g = multi_convolver(image[:,:,1], kernel,

iterations)

convolved_image_b = multi_convolver(image[:,:,2], kernel,

iterations)

reformed_image = np.dstack((np.rint(abs(convolved_image_r)),

np.rint(abs(convolved_image_g)),

np.rint(abs(convolved_image_b)))) /

255

fig, ax = plt.subplots(1,3, figsize = (17,10))

ax[0].imshow(abs(convolved_image_r), cmap='Reds')

ax[0].set_title(f'Red', fontsize = 15)

ax[1].imshow(abs(convolved_image_g), cmap='Greens')

ax[1].set_title(f'Green', fontsize = 15)

ax[2].imshow(abs(convolved_image_b), cmap='Blues')

ax[2].set_title(f'Blue', fontsize = 15)

[axi.set_axis_off() for axi in ax.ravel()]

return np.array(reformed_image).astype(np.uint8)

convolved_rgb_gauss = convolver_rgb(dog, gaussian, 2)

上面這個(gè)函數(shù)實(shí)際上將給我們返回重新生成的圖像,我們只需要將其插入到imshow函數(shù)中即可。

plt.figure(num=None, figsize=(8, 6), dpi=80)

imshow(convolved_rgb_gauss);

讓我們看看卷積十次后圖像會(huì)變成什么樣。

現(xiàn)在讓我們嘗試下更換銳化內(nèi)核會(huì)發(fā)生什么。

convolved_rgb_sharpen = convolver_rgb(dog, sharpen, 1)

處理后的圖像有一些輕微的扭曲,為什么會(huì)這樣呢?

請(qǐng)記住,RGB顏色空間隱式地將像素的光照與顏色混合。這意味著在不改變顏色的情況下對(duì)圖像的光照應(yīng)用卷積幾乎是不可能的。那么我們?nèi)绾翁幚磉@個(gè)問題呢?

解決此問題的一種方法是更改圖像的色彩空間。除了使用RGB顏色空間外,我們還可以使用YUV顏色空間。因?yàn)閅UV空間中的光照通道實(shí)際上是與顏色分開的。

現(xiàn)在我們編寫一個(gè)函數(shù),它首先將圖像轉(zhuǎn)換為YUV色彩空間,然后對(duì)圖像進(jìn)行卷積。

def convolver_rgb(image, kernel, iterations = 1):

img_yuv = rgb2yuv(image)

img_yuv[:,:,0] = multi_convolver(img_yuv[:,:,0], kernel,

iterations)

final_image = yuv2rgb(img_yuv)

fig, ax = plt.subplots(1,2, figsize = (17,10))

ax[0].imshow(image)

ax[0].set_title(f'Original', fontsize = 20)

ax[1].imshow(final_image);

ax[1].set_title(f'YUV Adjusted, Iterations = {iterations}',

fontsize = 20)

[axi.set_axis_off() for axi in ax.ravel()]

fig.tight_layout()

return final_image

final_image = convolver_rgb(dog, sharpen, iterations = 1)

現(xiàn)在可以看到,處理后的圖像是明顯銳化且沒有任何顏色扭曲的。還有許多其他的方法來解決這個(gè)問題,YUV轉(zhuǎn)換只是其中之一,我們還可以使用HSV來解決這個(gè)問題。

def convolver_comparison(image, kernel, iterations = 1):

img_yuv = rgb2yuv(image)

img_yuv[:,:,0] = multi_convolver(img_yuv[:,:,0], kernel,

iterations)

final_image_yuv = yuv2rgb(img_yuv)

img_hsv = rgb2hsv(image)

img_hsv[:,:,2] = multi_convolver(img_hsv[:,:,2], kernel,

iterations)

final_image_hsv = hsv2rgb(img_hsv)

convolved_image_r = multi_convolver(image[:,:,0], kernel,

iterations)

convolved_image_g = multi_convolver(image[:,:,1], kernel,

iterations)

convolved_image_b = multi_convolver(image[:,:,2], kernel,

iterations)

final_image_rgb = np.dstack((np.rint(abs(convolved_image_r)),

np.rint(abs(convolved_image_g)),

np.rint(abs(convolved_image_b)))) /

255

fig, ax = plt.subplots(2,2, figsize = (17,17))

ax[0][0].imshow(image)

ax[0][0].set_title(f'Original', fontsize = 30)

ax[0][1].imshow(final_image_rgb);

ax[0][1].set_title(f'RGB Adjusted, Iterations = {iterations}',

fontsize = 30)

fig.tight_layout()

ax[1][0].imshow(final_image_yuv)

ax[1][0].set_title(f'YUV Adjusted, Iterations = {iterations}',

fontsize = 30)

ax[1][1].imshow(final_image_hsv)

ax[1][1].set_title(f'HSV Adjusted, Iterations = {iterations}',

fontsize = 30)

[axi.set_axis_off() for axi in ax.ravel()]

fig.tight_layout()

convolver_comparison(dog, sharpen, iterations = 1)

我們看到,與原始RGB方法相比,HSV和YUV有了一些改進(jìn)。為了更好地說明,我們可以將迭代次數(shù)從1增加到2。

在2次迭代后,失真變得更加明顯。但是也很清楚,HSV和Y'UV調(diào)整后的圖像比原始RGB調(diào)整后的圖像要好得多。在選擇將卷積內(nèi)核應(yīng)用于圖像的最佳方法時(shí),應(yīng)當(dāng)牢記這些特性。

總結(jié)

在本文中,我們已經(jīng)學(xué)會(huì)了如何對(duì)圖像進(jìn)行模糊和銳化卷積。這些技術(shù)對(duì)于任何從事圖像處理和計(jì)算機(jī)視覺領(lǐng)域的人員都是至關(guān)重要的。非常重要的是,我們了解到,簡單地將卷積應(yīng)用到各個(gè)RGB通道可能不是最好的方法。在處理圖像時(shí),我們應(yīng)該始終意識(shí)到有大量不同類型的色彩空間可以使用。

·? END? ·

HAPPY?LIFE

總結(jié)

以上是生活随笔為你收集整理的python图像锐化_Python图像处理介绍--图像模糊与锐化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。