讓你的照片更鮮艷------hsv拉伸


如果你的照片看上去灰蒙蒙的,缺少生機,那么hsv拉伸也許可以幫你的忙。hsv拉伸是一種可以提高圖像鮮艷程度的圖像增強方法,它能夠讓圖像的顏色更加鮮活、艷麗,而且它的處理結果看上去很自然,比如源圖中較暗的紅色會變的鮮紅,而不會像拉伸對比度那樣把圖像弄的難看失真,暗紅色變的發紫發黑。

來個例子:

    

 

其基本原理如下:

1、 將源圖像的(rgb)顏色空間映射到(hsv ),什么是HSV?

2、 對圖像的s和v通道進行一次min-max normalize,h通道不變

所謂min-max normalize是指: dst(x,y) = [src(x,y) – min(src(x,y)) ] / [ (max(src(x,y)) – min(src(x,y)) ]

hsv拉伸處理后,圖像不失真的關鍵因素就是h通道不變,即圖像的色相與源圖一致

3、 將新的(h s' v')映射回(rgb)

 

下面是gimp給出的源碼(只貼出關鍵部分):

 1 typedef struct {        //用來存放最大最小值的結構體
 2   double shi;
 3   double slo;
 4   double vhi;
 5   double vlo;
 6 } AutostretchData;        
 7 
 8 static void        //找到最大最小值
 9 find_max (guchar *src, gint bpp, AutostretchData *data)
10 {
11   double h, s, v;
12 
13   gimp_rgb_to_hsv4(src, &h, &s, &v);
14   if (s > data->shi) data->shi = s;
15   if (s < data->slo) data->slo = s;
16   if (v > data->vhi) data->vhi = v;
17   if (v < data->vlo) data->vlo = v;
18 }
19 
20 static void        //關鍵函數!
21 autostretch_hsv_func (guchar *src, guchar *dest, gint bpp,
22                       AutostretchData *data)
23 {
24   double h, s, v;
25 
26   gimp_rgb_to_hsv4(src, &h, &s, &v);
27   if (data->shi != data->slo)
28     s = (s - data->slo) / (data->shi - data->slo);        //關鍵語句
29   if (data->vhi != data->vlo)
30     v = (v - data->vlo) / (data->vhi - data->vlo);        //關鍵語句
31   gimp_hsv_to_rgb4(dest, h, s, v);
32 
33   if (bpp == 4)
34     dest[3] = src[3];
35 }
36 
37 static void
38 indexed_autostretch_hsv (gint32 image_ID)
39 {
40   guchar *cmap;
41   AutostretchData data = {0.0, 1.0, 0.0, 1.0};
42   gint ncols, i;
43 
44   cmap = gimp_image_get_colormap (image_ID, &ncols);
45 
46   if (!cmap)
47     {
48       g_message (_("autostretch_hsv: cmap was NULL!  Quitting...\n"));
49       gimp_quit ();
50     }
51 
52   for (i = 0; i < ncols; i++)
53     {
54       find_max (&cmap[i * 3], 3, &data);
55     }
56 
57   for (i = 0; i < ncols; i++)
58     {
59       autostretch_hsv_func (&cmap[i * 3], &cmap[i * 3], 3, &data);
60     }
61 
62   gimp_image_set_colormap (image_ID, cmap, ncols);
63 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM