2016-10-11 71 views
1

將灰度圖像從[30-200]映射到[0,255]需要什麼線性映射函數?什麼線性映射函數

我已經做了一些工作,這是我想出了,但我想知道這是否是正確的方式做到這一點:

min : 30, want to map to 0 
mid : 85, want to map to 128 
max : 200, want to map to 255 

if (i <= mid), M(i) = 127*(i - min)/(mid - min) 
if (i > mid), M(i) = 128 + (255 - 128)*(i - mid - 1)/(max - mid - 1); 

這似乎是正確的我,因爲:

if i = 30, it should map to 0. Plugging the information in: 
M(30) = 127*(30-30)/(85 - 30) = 0 
If i = 85, it should map to 127: 
M(85) = 127*(85 - 30)/(85 - 30) = 127 
If i = 200, it should map to 200: 
M(200) = 128 + (255 - 128)*(200 - 85 - 1)/(200 - 85 - 1) = 255 

謝謝。

+2

這可能是做這件事的方式。在這種情況下它是線性的。我建議你看看「直方圖均衡」。這就是你想要做的。存在許多不同的映射,這取決於您想要更改圖像對比度的原因。 – Eskapp

回答

1

如果應用線性映射,第一個間隔的中間會自動映射到第二個間隔的中間(您可以將其視爲Thales原理)。所以你只需要應用一個方程:y = a.x + b

爲了解這個方程,你有兩個信息:a.30 + b = 0和 a.200 + b = 255。

然後你解決這個問題,你得到:a = 1.5,b = -45。

而要小心,[30,200]的中間不是85而是115(= 30 + 85)。

最後,你可以檢查一下,如果你申請1.5 * X-45 = y,則成功地獲得:30-> 0,200-> 255和115-> 127.5