2017-03-10 581 views
-2

我想對16位灰度圖像(其最大值爲850)的某些像素着色。 首先,我把它變成了一個3d堆棧(I),然後我通過了一個顏色 ,但圖像沒有出現在一個好的方式。着色灰度16位圖像

I = np.dstack([image, image, image]) 
    I[5:10, 5:10, :] = [200, 0 , 0] 
    plt.figure() 
    plt.imshow(I, interpolation='nearest') 

the 16 bits grayscale image after the colour changing edited 這只是圖像的顯示爲例,黑色是不是在所有每例子清楚。我不是代碼中的我的形象。

+0

紅色區域'NaN'的值是? – berna1111

+0

這只是一個例子,它不是代碼中我的形象。否紅色區域內的值不是NaN的 –

+0

您想要着色的方法或基礎是什麼?對於漸變映射,您需要處理最小值和最大值,在某些情況下還需要處理值分佈(以便您可以選擇線性映射或非線性映射)。 – Spektre

回答

1

您確定RGB值介於0和1之間嗎?使用你的代碼,我做了這個例子:

import matplotlib.pyplot as plt 
import numpy as np 

n_points = 100 
a = np.linspace(0, 1, n_points) 
b,c = np.meshgrid(a,a) 
image = (b+c)/2 

a_third = n_points/3. 

I = np.dstack([image, image, image])# 
I[a_third:2*a_third, a_third:2*a_third, :] = [1 , 0 , 0] 
plt.figure() 
plt.imshow(I, interpolation='nearest') 

Resulting picture with the centre in red

但是,如果我改變上面的例子中使用0到255之間的值(你似乎那些點設置爲[200, 0, 0]時做):

import matplotlib.pyplot as plt 
import numpy as np 

n_points = 100 
a = np.linspace(0, 255, n_points) 
b,c = np.meshgrid(a,a) 
image = (b+c)/2 

a_third = n_points/3. 

I = np.dstack([image, image, image])# 
I[a_third:2*a_third, a_third:2*a_third, :] = [255 , 0 , 0] 
plt.figure() 
plt.imshow(I, interpolation='nearest') 

enter image description here

給出的值大於1時,只會考慮其剩餘W¯¯當我認爲母雞除以1(你可以在最後一個例子中通過更改image = ((b+c)/2)%1行來檢查,並驗證你獲得了相同的圖像)。