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

小師弟:二師兄,現在圖像處理庫有很多,你用哪個庫呢?可否給小師弟推薦個從而可以深度學習呢?

二師兄:我啊,我看別人用什麼啊,別人用什麼,我就搬什麼磚啊。

小師弟:紅紅火火恍恍惚惚……二師兄好像一語道破了現在有些人所做的工(ban)程(zhuan)

小師弟心想,二師兄說的有些道理,不過趁現在有時間,還是要學習一個庫,說不定什麼時候別人也可以搬自己的磚呢?(小師弟嘴角露出了邪魅的笑)

python圖像處理類庫主要有Opencv、PIL、skimage,各有所長,這裡主要學習skimage。

那,要不要從頭開始學呢?比如從圖片的read。後來想了想,還是直接上手例子,把例子過一遍,基礎應該就沒有大問題了。(小師弟的個人見解,如若不當,還請n師兄/師姐來教訓啊)

好,下面我們開始第一個例子。

我們先說下HSV色彩空間模型。

H:色調;S:飽和度;V:值。

簡單來說,HSV模型是按照色調、深淺、明暗來描述的,其空間模型是個椎體:

這個模型的好處在於從三個不同的方向去描述了顏色的形成,不存在直接耦合關係,每個基準變數是獨立的,信息損失同樣是從每個維度開始的。

比如圖片染色均一化問題,我們常常用到rgb2hsv的手段來解決,可以有效的保護好紋理、分布等特徵。

這裡我們看下染色體的顏色分離的一個例子:

注意,這裡的例子是HED顏色空間,HSV空間是同樣的效果。

import matplotlib.pyplot as pltfrom skimage import datafrom skimage.color import rgb2hedfrom matplotlib.colors import LinearSegmentedColormap#創建一個和原始通道一樣的顏色cmap_hema = LinearSegmentedColormap.from_list(mycmap,[white,navy])cmap_dab = LinearSegmentedColormap.from_list(mycmap,[white,saddlebrown])cmap_eosin = LinearSegmentedColormap.from_list(mycmap,[darkviolet,white])ihc_rgb = data.immunohistochemistry()ihc_hed = rgb2hed(ihc_rgb)#創建圖層fig, axes = plt.subplots(2,2,figsize=(7,6), sharex=True ,sharey=True ,subplot_kw={adjustable:box-forced})ax = axes.ravel()#原圖ax[0].imshow(ihc_rgb)ax[0].set_title(original image)#H通道ax[1].imshow(ihc_hed[:,:,0],cmap=cmap_hema)ax[1].set_title(hematoxylin)#E通道ax[2].imshow(ihc_hed[:,:,1],cmap=cmap_eosin)ax[2].set_title(eosin)#D通道ax[3].imshow(ihc_hed[:,:,2],cmap=cmap_dab)ax[3].set_title(dab)#不顯示坐標軸for a in ax.ravel(): a.axis(off)fig.tight_layout()

得到結果如下:

上面我們展示了不同HED的顏色通道,下面我們把其中兩個通道組合看看會是什麼樣子。

import numpy as npfrom skimage.exposure import rescale_intensity# 將h和d通道的亮度水平rescale到(0,1)h = rescale_intensity(ihc_hed[:, :, 0], out_range=(0, 1))d = rescale_intensity(ihc_hed[:, :, 2], out_range=(0, 1))#兩個通道相加zdh = np.dstack((np.zeros_like(h), d, h))fig = plt.figure()axis = plt.subplot(1, 1, 1, sharex=ax[0], sharey=ax[0], adjustable=box-forced)axis.imshow(zdh)axis.set_title("Stain separated image (rescaled)")axis.axis(off)plt.show()

得到結果如下:

詳情可參考skimage官網例子

第一個例子學完了,小師弟就又迫不及待的開始了第二個例子的學習之旅……


推薦閱讀:

(科普)簡單的人臉識別
Rocket Training: 一種提升輕量網路性能的訓練方法
從RTX&DXR看圖形學的發展
【2D Single-person Pose Estimatiom】
[計算機視覺論文速遞] 2018-04-03

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