skimage例子學習(二)將灰度變換的濾波器應用到RGB圖像
前期小師弟學了啥呢?這可要好好想想,不然師父問時說不上來肯定是要挨板子的啊。
hhhh...想起來了,前期小師弟學了這些:
skimage例子學習(一)HED顏色通道提取與融合
想起來明天屁股就不會又紅又腫了。
接下來小師弟就要開始刷第二關的怪了,怎樣將灰度變換的濾波器應用到RGB圖像上呢?
空間濾波是圖像處理領域應用廣泛的主要工具之一。但是這些濾波器都是作用於灰度圖像的,而skimage已經為小師弟提供了adapt_rgb裝飾器來實現對RGB圖像的濾波,這下可把小師弟高興壞了。
有了工具,怎麼對RGB圖像進行濾波呢?這裡有兩種預定義的方式:
- each_channel 對RGB圖像的每個顏色通道分別進行濾波處理。
- hsv_value 將RGB圖像轉化為HSV圖像,只V通道進行濾波處理。
兩種方式的實如下:
from skimage.color.adapt_rgb import adapt_rgb, each_channel, hsv_valuefrom skimage import filters@adapt_rgb(each_channel)def sobel_each(image): return filters.sobel(image)@adapt_rgb(hsv_value)def sobel_hsv(image): return filters.sobel(image)
這裡使用的濾波器是Sobel運算元。
那麼啥是Sobel運算元,這裡還是要去學習下的,萬一師父挑刺可咋辦?
Sobel運算元是一種進行邊緣檢測的梯度運算元。其表示如下:
下面就可以用這個工具去刷這一級的怪了。
from skimage import datafrom skimage.exposure import rescale_intensityimport matplotlib.pyplot as pltimage = data.astronaut()#創建圖層fig = plt.figure(figsize=(14,7))ax_each = fig.add_subplot(121, adjustable=box-forced)ax_hsv = fig.add_subplot(122, sharex=ax_each, sharey=ax_each, adjustable=box-forced)#繪製濾波後的RGB圖ax_each.imshow(rescale_intensity(1 - sobel_each(image)))ax_each.set_xticks([]), ax_each.set_yticks([])#去掉刻度ax_each.set_title("Sobel filter computed
on individual RGB channels")#繪製濾波後的HSV圖ax_hsv.imshow(rescale_intensity(1 - sobel_hsv(image)))ax_hsv.set_xticks([]), ax_hsv.set_yticks([])#去掉刻度ax_hsv.set_title("Sobel filter computed
on (V)alue converted image (HSV)")
刷怪結果如下:
只是刷了這一個怪還是不夠的,小師弟可是要能夠舉一反一的(hhh,舉一反三做不到,只能將就舉一反一了)。
要根據上面的例子來創建自己的調整方式,創建自己的調整方式的一般格式如下:
from skimage.color import rgb2graydef as_gray(image_filter,image,*args,**kwargs): gray_image=rgb2gray(image) return image_filter(gray_image,*args,**kwargs)
有了模板,還怕不會用嗎?說來就來。
這裡小師弟實現一個對灰度圖像進行濾波的例子。
這個例子主要實現將RGB圖像轉化為灰度圖,之後返回濾波後的結果。
代碼如下:
from skimage.color import rgb2graydef as_gray(image_filter,image,*args,**kwargs): gray_image=rgb2gray(image) return image_filter(gray_image,*args,**kwargs)
下面就可以使用裝飾器函數來進行灰度圖像的濾波操作:
@adapt_rgb(as_gray)def sobel_gray(image): return filters.sobel(image)fig = plt.figure(figsize=(7, 7))ax = fig.add_subplot(111, sharex=ax_each, sharey=ax_each, adjustable=box-forced)ax.imshow(rescale_intensity(1 - sobel_gray(image)), cmap=plt.cm.gray)ax.set_xticks([]), ax.set_yticks([])ax.set_title("Sobel filter computed
on the converted grayscale image")plt.show()
結果如下:
詳情可參閱skimage官方文檔
打了這一級的小怪,小師弟的經驗值又增加了,加把勁,說不定在耍一級就可以升級了~~
推薦閱讀:
※從RTX&DXR看圖形學的發展
※論文閱讀:Attentional Pooling for Action Recognition
※【人工智慧學習總結3】圖像的相似度衡量指標、二值化方法評估指標(二)
※讀論文系列:Object Detection NIPS2015 Faster RCNN
※【重磅】商湯科技 C 輪戰略融資 6 億美元,估值達45億美元成世界第一AI獨角獸!阿里領投