skimage例子學習(二)將灰度變換的濾波器應用到RGB圖像

前期小師弟學了啥呢?這可要好好想想,不然師父問時說不上來肯定是要挨板子的啊。

hhhh...想起來了,前期小師弟學了這些:

skimage例子學習(一)HED顏色通道提取與融合

想起來明天屁股就不會又紅又腫了。

接下來小師弟就要開始刷第二關的怪了,怎樣將灰度變換的濾波器應用到RGB圖像上呢?

空間濾波是圖像處理領域應用廣泛的主要工具之一。但是這些濾波器都是作用於灰度圖像的,而skimage已經為小師弟提供了adapt_rgb裝飾器來實現對RGB圖像的濾波,這下可把小師弟高興壞了。

有了工具,怎麼對RGB圖像進行濾波呢?這裡有兩種預定義的方式:

  1. each_channel

    對RGB圖像的每個顏色通道分別進行濾波處理。
  2. 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獨角獸!阿里領投

TAG:計算機視覺 | 圖像處理 | Python庫 |