【python图像处理】彩色映射(续篇)
在Python中的彩色映射一文中,向大伙介紹了一下matplotlib模塊中內嵌的colormap,以及如何將這些colormap中的數值導出來以供使用。
在續篇中我們將進一步向大家介紹如何生成自定義colormap。如現在有(255,0,0), (255,255,0), (255,255,255), (0,157,0), (255,0,255)五種顏色,我們如何用這些顏色作為區間邊界生成一個自定義的colormap呢?
最簡單的情形,以五種顏色作為邊界,我們將整個灰度級平均分成4個等分,對于[0, 255]灰度區間而言,均分后的區間分別為[0, 64),[64, 128),[128, 191),[191, 255]。那么我們只需要在每個區間分別對R、G、B三個通道進行插值即可,如線性插值,具體實現如下。
def linear_colormap(colors, max):rows, cols = np.shape(colors)position = [] for i in range(0, rows): position.append(np.int(round((1.0 * i * max)/(rows - 1))))color_map = []#遍歷所有區間for i in range(0, rows - 1):#遍歷區間中的所有像素點for j in range(position[i], position[i + 1]):color_r = (colors[i+1][0] - colors[i][0]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][0]color_g = (colors[i+1][1] - colors[i][1]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][1]color_b = (colors[i+1][2] - colors[i][2]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][2]color = (color_r, color_g, color_b)color_map.append(color)#最后一個灰度級沒有遍歷到,需要進行特殊處理color_map.append(colors[rows - 1])return color_map其中,參數max是灰度級的最大值,這里即為255。順便也貼一下繪制colormap的代碼:
def draw_colormap(color_map):map_image_arr = np.zeros((50, 256, 3), np.uint8)for i in range(0, 256, 1):map_image_arr[:, i, 0] = color_map[i][0]map_image_arr[:, i, 1] = color_map[i][1]map_image_arr[:, i, 2] = color_map[i][2] map_image = Image.fromarray(map_image_arr)map_image.show()map_image.save("colormap.png")return這樣,我們就得到了自定義的colormap。
另外,我們也可以通過制定區間寬度,即上述position的值來生成colormap,如position = [0, 50, 100, 150, 255]。此時只需要對上述程序略作修改即可。
這樣獲得的colormap如下圖所示。
更復雜一點,我們可以使用不同的插值算法,來進行自定義colormap,如使用二次、三次插值等,這里就不再作具體的介紹,感興趣的同學可以嘗試一下!
2017.03.09
總結
以上是生活随笔為你收集整理的【python图像处理】彩色映射(续篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【算法+OpenCV】基于三次Bezie
- 下一篇: websocket python爬虫_p