ISP模块之色彩增强算法--HSV空间Saturation通道调整 .

色彩增强不同于彩色图像增强,图像增强的一般处理方式为直方图均衡化等,目的是为了增强图像局部以及整体对比度。而色彩增强的目的是为了使的原有的不饱和的色彩信息变得饱和、丰富起来。对应于Photoshop里面的“色相/饱和度”调节选项里面对饱和度的操作。色彩增强的过程,并不改变原有彩色图像的颜色以及亮度信息。

在我的色彩增强算法模块里面,始终只针对色彩饱和度(Saturation)信息做研究,调整。这样的话,那就不得不介绍HSV颜色空间了,H代表Hue(色彩),S代表Saturation(饱和度),V代表Value,也可用B表示(Brightness,明度),HSV空间也可称作HSB空间。

HSV空间在wikipedia上的介绍,https://en.wikipedia.org/wiki/HSL_and_HSV

下面根据自己的理解介绍一下HSV空间,以及其各通道在Matlab和OpenCV中的不同。

HSV的圆柱模型

HSV的圆锥模型

从上图可以看出,在HSV空间中,Hue通道的取值从0-360°变化时,颜色从红->黄->绿->青->蓝逐步变化。Saturation从0->1变化时,色彩逐渐加深变成纯色(pure)。Value值从0->1变化时,图像整体亮度增加,V值为0时,图像为全黑,V值为1时,图像为全白

Matlab RGB色彩空间向HSV转换,采用函数rgb2hsv,转换后的hsv各通道的元素取值范围为[0,1];OpenCV中彩色图像向HSV空间中转换,cvtColor(src,srcHsv,CV_BGR2HSV),转换后H的取值范围为[0,180],S,V的取值范围为[0,255].

下面介绍自己的算法处理思路,后面会给出完整的Matlab代码:

步骤一、给出一张原图src,用PS进行饱和度(Saturation)+40处理后另存为src_40;

步骤二、将以上两张图像分别转换到hsv空间,提取出饱和度信息,分别为S,S_40;

步骤三、统计饱和度增加40后,原色彩饱和度与饱和度增量之间的对应关系,即S -- (S_40-S);

步骤四、对关系S -- (S_40-S)进行二次多项式曲线拟合,得到二次曲线f(x) = p1*x^2 + p2*x + p3;

为什么是二次?1.对应关系呈现出抛物线形状;2.更高次曲线并没有明显改善拟合性能,且计算消耗会变高。

步骤五、任意给定输出图像input,根据其色彩饱和度信息,即可进行色彩增强40处理,新的饱和度信息可以表示为S‘(x) = S(x) + f(x),得到增强后的色彩信息后返回RGB图像输出;

步骤六、分别对原图+20,+40,+60后进行饱和度信息统计,并得到相应拟合参数,设置为色彩增强的低、中、高三挡,在实际处理过程中,根据输入图像input自身色彩饱和度信息(均值)自适应选取相应参数进行色彩增强;

步骤七、按需对某一单独颜色通道进行色彩增强处理,例如绿色范围为105°-135°,在对该范围进行增强的同时,还需对75°-105°,135°-165°进行一半强度的增强,这样才会保证色彩的连续性,不会出现色斑;

步骤八、按需对色彩(Hue)进行转换;

代码部分:第一部分用作估计拟合参数,在Curve fitting tool里面对X,Y进行拟合,得到曲线参数。

[plain] view plain copy print?

  1. % Color Enhancement
  2. clc,clear,close all
  3. src1 = imread(‘src.bmp‘);
  4. src2 = imread(‘src_40.bmp‘);
  5. src1_hsv = rgb2hsv(src1);
  6. src2_hsv = rgb2hsv(src2);
  7. h1 = src1_hsv(:,:,1);
  8. s1 = src1_hsv(:,:,2);
  9. v1 = src1_hsv(:,:,3);
  10. h2 = src2_hsv(:,:,1);
  11. s2 = src2_hsv(:,:,2);
  12. v2 = src2_hsv(:,:,3);
  13. %
  14. meanS1 = mean(s1(:));
  15. varS1  = std2(s1);
  16. %
  17. meanS2 = mean(s2(:));
  18. varS2  = std2(s2);
  19. %
  20. deltaS = s2 - s1;
  21. deltaV = v2 - v1;
  22. %% test1 : 观测“原饱和度-饱和度调整增量”的关系 saturation and delta saturation
  23. figure;
  24. oriS = zeros(101,2);
  25. s3 = s1;
  26. j = 1;
  27. for i = 0: 0.01 : 1
  28. oriS(j,1) = i + 0.01;
  29. oriS(j,2) =  mean(deltaS(find(s1 > i & s1< i + 0.01)));
  30. j = j + 1;
  31. end
  32. X  = oriS(:,1);
  33. Y  = oriS(:,2);
  34. XX = oriS(:,1) * 255;
  35. YY = oriS(:,2) * 255;
  36. plot(XX,YY)
% Color Enhancement
clc,clear,close all
src1 = imread(‘src.bmp‘);
src2 = imread(‘src_40.bmp‘);

src1_hsv = rgb2hsv(src1);
src2_hsv = rgb2hsv(src2);

h1 = src1_hsv(:,:,1);
s1 = src1_hsv(:,:,2);
v1 = src1_hsv(:,:,3);

h2 = src2_hsv(:,:,1);
s2 = src2_hsv(:,:,2);
v2 = src2_hsv(:,:,3);
%
meanS1 = mean(s1(:));
varS1  = std2(s1);
%
meanS2 = mean(s2(:));
varS2  = std2(s2);
%
deltaS = s2 - s1;
deltaV = v2 - v1;

%% test1 : 观测“原饱和度-饱和度调整增量”的关系 saturation and delta saturation
figure;
oriS = zeros(101,2);
s3 = s1;
j = 1;
for i = 0: 0.01 : 1
    oriS(j,1) = i + 0.01;
    oriS(j,2) =  mean(deltaS(find(s1 > i & s1< i + 0.01)));
    j = j + 1;
end
X  = oriS(:,1);
Y  = oriS(:,2);
XX = oriS(:,1) * 255;
YY = oriS(:,2) * 255;
plot(XX,YY)

第二部分,对输入图像进行高、中、低三级自适应增强处理

[html] view plain copy print?

  1. %% Color Enhancement Module -- Authored by HuangDao,08/17/2015
  2. % functions: input a image of type BMP or PNG, the program will decide to
  3. % do the Color Enhancement choice for you.There are four types of Enhanced
  4. % intensity - 20,40,60,80.The larger number stands for stronger
  5. % enhancement.
  6. % And we can also choose the simple color channel(eg.R,G,B) to do the
  7. % enhancement.There are also four different types of enhanced intensity.
  8. %
  9. % parameters table
  10. %  ------------------------------------------------------------------------
  11. % | Enhanced  |     MATLAB params             |      OpenCV params         |
  12. % | intensity |p1        p2        p3         | p1        p2        p3     |
  13. % | 20        |-0.1661   0.2639    -0.003626  |-0.0006512 0.2639    -0.9246|
  14. % | 40        |-0.4025   0.6238    -0.0005937 |0.001578   0.6238    -0.1514|
  15. % | 60        |1.332     1.473     -0.01155   |-0.005222  1.473     -2.946 |
  16. % | 80        |-4.813    3.459     -0.004568  |-0.01887   3.459     -1.165 |
  17. %  ------------------------------------------------------------------------
  18. clc; clear ;close all
  19. % 载入文件夹
  20. pathName = ‘.\‘;
  21. fileType = ‘*.bmp‘;
  22. files    = dir([pathName fileType]);
  23. len      = length(files);
  24. for pic = 5%1:1:len
  25. srcName = files(pic).name;
  26. srcImg  = imread(srcName);
  27. srcHSV  = rgb2hsv(srcImg);
  28. srcH    = srcHSV(:,:,1);
  29. srcS    = srcHSV(:,:,2);
  30. srcV    = srcHSV(:,:,3);
  31. meanS   = mean(srcS(:));
  32. varS    = std2(srcS);
  33. %图像整体进行色彩增强处理
  34. if (meanS >= 0.5)
  35. p1 = 0;p2 = 0;p3 = 0;
  36. else if (meanS >= 0.35 && meanS < 0.5)
  37. p1 = -0.1661;p2 = 0.2639;p3 = -0.003626;
  38. else if (meanS >=0.2 && meanS <0.35)
  39. p1 = -0.4025;p2 = 0.6238;p3 = -0.0005937;
  40. else
  41. p1 = 1.332;p2 = 1.473;p3 = -0.01155;
  42. end
  43. end
  44. end
  45. dstS = srcS + p1*srcS.*srcS + p2*srcS + p3 ;
  46. dstHSV = srcHSV;
  47. dstHSV(:,:,2) = dstS;
  48. dstImg = hsv2rgb(dstHSV);
  49. figure;imshow(srcImg);
  50. figure;imshow(dstImg);
  51. %指定R,G,B通道进行色彩增强处理,红色范围([225-255]),绿色范围(75-[105-135]-165),蓝色范围([-15-15])
  52. p11 = -0.4025;p21 = 0.6238;p31 = -0.0005937;%周边杂色调整系数,40
  53. p12 = 1.332;  p22 = 1.473; p32 = -0.01155;  %纯色区域调整系数,60
  54. compHue = srcH;
  55. GcompS  = dstS;
  56. RcompS  = dstS;
  57. BcompS  = dstS;
  58. channel = ‘B‘;
  59. switch channel
  60. case ‘G‘
  61. I1 = find(compHue > 0.2083 & compHue <0.2917);
  62. GcompS(I1) = dstS(I1) + dstS(I1).*dstS(I1)*p11 + dstS(I1)*p21 + p31;
  63. I2 = find(compHue >= 0.2917 & compHue <= 0.3750);
  64. GcompS(I2) = dstS(I2) + dstS(I2).*dstS(I2)*p12 + dstS(I2)*p22 + p32;
  65. I3 = find(compHue > 0.3750 & compHue <0.4583);
  66. GcompS(I3) = dstS(I3) + dstS(I3).*dstS(I3)*p11 + dstS(I3)*p21 + p31;
  67. compHSV = dstHSV;
  68. compHSV(:,:,2) = GcompS;
  69. dstImgG = hsv2rgb(compHSV);
  70. figure;imshow(dstImgG);
  71. case ‘R‘
  72. I1 = find(compHue > 0.875 & compHue <0.9583);
  73. RcompS(I1) = dstS(I1) + dstS(I1).*dstS(I1)*p11 + dstS(I1)*p21 + p31;
  74. I2 = find(compHue >= 0.9583 | compHue <= 0.0417);
  75. RcompS(I2) = dstS(I2) + dstS(I2).*dstS(I2)*p12 + dstS(I2)*p22 + p32;
  76. I3 = find(compHue > 0.0417 & compHue <0.125);
  77. RcompS(I3) = dstS(I3) + dstS(I3).*dstS(I3)*p11 + dstS(I3)*p21 + p31;
  78. compHSV = dstHSV;
  79. compHSV(:,:,2) = RcompS;
  80. dstImgR = hsv2rgb(compHSV);
  81. figure;imshow(dstImgR);
  82. case ‘B‘
  83. I1 = find(compHue > 0.5417 & compHue <0.625);
  84. BcompS(I1) = dstS(I1) + dstS(I1).*dstS(I1)*p11 + dstS(I1)*p21 + p31;
  85. I2 = find(compHue >= 0.625 & compHue <= 0.7083);
  86. BcompS(I2) = dstS(I2) + dstS(I2).*dstS(I2)*p12 + dstS(I2)*p22 + p32;
  87. I3 = find(compHue > 0.7083 & compHue <0.7917);
  88. BcompS(I3) = dstS(I3) + dstS(I3).*dstS(I3)*p11 + dstS(I3)*p21 + p31;
  89. compHSV = dstHSV;
  90. compHSV(:,:,2) = BcompS;
  91. dstImgB = hsv2rgb(compHSV);
  92. figure;imshow(dstImgB);
  93. end
  94. %进行R,G,B通道之间的互换
  95. convH = zeros(size(srcH,1),size(srcH,2)); %convert
  96. deltaHue = 240;
  97. switch deltaHue
  98. case 120
  99. disp(‘R -> G‘)
  100. convH = srcH + 1/3;
  101. convH(find(convH >= 1)) = convH(find(convH >= 1)) - 1;
  102. case 240
  103. disp(‘R -> B‘)
  104. convH = srcH + 2/3;
  105. convH(find(convH >= 1)) = convH(find(convH >= 1)) - 1;
  106. end
  107. convHSV = dstHSV;
  108. convHSV(:,:,1) = convH;
  109. convImg = hsv2rgb(convHSV);
  110. figure;imshow(convImg)
  111. pause();
  112. end
%% Color Enhancement Module -- Authored by HuangDao,08/17/2015
% functions: input a image of type BMP or PNG, the program will decide to
% do the Color Enhancement choice for you.There are four types of Enhanced
% intensity - 20,40,60,80.The larger number stands for stronger
% enhancement.
% And we can also choose the simple color channel(eg.R,G,B) to do the
% enhancement.There are also four different types of enhanced intensity.
%
% parameters table
%  ------------------------------------------------------------------------
% | Enhanced  |     MATLAB params             |      OpenCV params         |
% | intensity |p1        p2        p3         | p1        p2        p3     |
% | 20        |-0.1661   0.2639    -0.003626  |-0.0006512 0.2639    -0.9246|
% | 40        |-0.4025   0.6238    -0.0005937 |0.001578   0.6238    -0.1514|
% | 60        |1.332     1.473     -0.01155   |-0.005222  1.473     -2.946 |
% | 80        |-4.813    3.459     -0.004568  |-0.01887   3.459     -1.165 |
%  ------------------------------------------------------------------------

clc; clear ;close all
% 载入文件夹
pathName = ‘.\‘;
fileType = ‘*.bmp‘;
files    = dir([pathName fileType]);
len      = length(files);

for pic = 5%1:1:len
    srcName = files(pic).name;
    srcImg  = imread(srcName);
    srcHSV  = rgb2hsv(srcImg);
    srcH    = srcHSV(:,:,1);
    srcS    = srcHSV(:,:,2);
    srcV    = srcHSV(:,:,3);
    meanS   = mean(srcS(:));
    varS    = std2(srcS);
    %图像整体进行色彩增强处理
    if (meanS >= 0.5)
        p1 = 0;p2 = 0;p3 = 0;
    else if (meanS >= 0.35 && meanS < 0.5)
            p1 = -0.1661;p2 = 0.2639;p3 = -0.003626;
        else if (meanS >=0.2 && meanS <0.35)
                p1 = -0.4025;p2 = 0.6238;p3 = -0.0005937;
            else
                p1 = 1.332;p2 = 1.473;p3 = -0.01155;
            end
        end
    end
    dstS = srcS + p1*srcS.*srcS + p2*srcS + p3 ;
    dstHSV = srcHSV;
    dstHSV(:,:,2) = dstS;
    dstImg = hsv2rgb(dstHSV);
    figure;imshow(srcImg);
    figure;imshow(dstImg);
    %指定R,G,B通道进行色彩增强处理,红色范围([225-255]),绿色范围(75-[105-135]-165),蓝色范围([-15-15])
    p11 = -0.4025;p21 = 0.6238;p31 = -0.0005937;%周边杂色调整系数,40
    p12 = 1.332;  p22 = 1.473; p32 = -0.01155;  %纯色区域调整系数,60
    compHue = srcH;
    GcompS  = dstS;
    RcompS  = dstS;
    BcompS  = dstS;
    channel = ‘B‘;
    switch channel
        case ‘G‘
            I1 = find(compHue > 0.2083 & compHue <0.2917);
            GcompS(I1) = dstS(I1) + dstS(I1).*dstS(I1)*p11 + dstS(I1)*p21 + p31;
            I2 = find(compHue >= 0.2917 & compHue <= 0.3750);
            GcompS(I2) = dstS(I2) + dstS(I2).*dstS(I2)*p12 + dstS(I2)*p22 + p32;
            I3 = find(compHue > 0.3750 & compHue <0.4583);
            GcompS(I3) = dstS(I3) + dstS(I3).*dstS(I3)*p11 + dstS(I3)*p21 + p31;
            compHSV = dstHSV;
            compHSV(:,:,2) = GcompS;
            dstImgG = hsv2rgb(compHSV);
            figure;imshow(dstImgG);
        case ‘R‘
            I1 = find(compHue > 0.875 & compHue <0.9583);
            RcompS(I1) = dstS(I1) + dstS(I1).*dstS(I1)*p11 + dstS(I1)*p21 + p31;
            I2 = find(compHue >= 0.9583 | compHue <= 0.0417);
            RcompS(I2) = dstS(I2) + dstS(I2).*dstS(I2)*p12 + dstS(I2)*p22 + p32;
            I3 = find(compHue > 0.0417 & compHue <0.125);
            RcompS(I3) = dstS(I3) + dstS(I3).*dstS(I3)*p11 + dstS(I3)*p21 + p31;
            compHSV = dstHSV;
            compHSV(:,:,2) = RcompS;
            dstImgR = hsv2rgb(compHSV);
            figure;imshow(dstImgR);
        case ‘B‘
            I1 = find(compHue > 0.5417 & compHue <0.625);
            BcompS(I1) = dstS(I1) + dstS(I1).*dstS(I1)*p11 + dstS(I1)*p21 + p31;
            I2 = find(compHue >= 0.625 & compHue <= 0.7083);
            BcompS(I2) = dstS(I2) + dstS(I2).*dstS(I2)*p12 + dstS(I2)*p22 + p32;
            I3 = find(compHue > 0.7083 & compHue <0.7917);
            BcompS(I3) = dstS(I3) + dstS(I3).*dstS(I3)*p11 + dstS(I3)*p21 + p31;
            compHSV = dstHSV;
            compHSV(:,:,2) = BcompS;
            dstImgB = hsv2rgb(compHSV);
            figure;imshow(dstImgB);
    end
    %进行R,G,B通道之间的互换
    convH = zeros(size(srcH,1),size(srcH,2)); %convert
    deltaHue = 240;
    switch deltaHue
        case 120
            disp(‘R -> G‘)
            convH = srcH + 1/3;
            convH(find(convH >= 1)) = convH(find(convH >= 1)) - 1;
        case 240
            disp(‘R -> B‘)
            convH = srcH + 2/3;
            convH(find(convH >= 1)) = convH(find(convH >= 1)) - 1;
    end
    convHSV = dstHSV;
    convHSV(:,:,1) = convH;
    convImg = hsv2rgb(convHSV);
    figure;imshow(convImg)
    pause();
end

添加OpenCV代码段:

[cpp] view plain copy print?

  1. Mat srcHSV,sat,satAdj,dstMerge,dst;     //sat - saturation饱和度分量
  2. Mat imageAwb = imread("m_ImageAwb.bmp");
  3. vector<Mat> channels,channels1;
  4. double p1,p2,p3;
  5. cvtColor(imageAwb,srcHSV,CV_BGR2HSV);
  6. split(srcHSV,channels);
  7. split(srcHSV,channels1);
  8. sat = channels.at(1);
  9. Scalar m = mean(sat);
  10. if (m(0) <= 51.5)
  11. {p1 = -0.002714 , p2 = 0.9498, p3 = -0.5073;  AfxMessageBox("High Color Enhancement!"); }//高
  12. else if (m(0) > 38.5 && m(0) <= 89.5)
  13. {p1 = -0.001578  , p2 = 0.6238, p3 = -0.1514;AfxMessageBox("Middle Color Enhancement!"); }//中
  14. else if (m(0) > 89.5 && m(0) <=127.5)
  15. {p1 = -0.0006512, p2 = 0.2639, p3 = -0.9246;AfxMessageBox("Low Color Enhancement!");}//低
  16. else
  17. {p1 = 0,p2 = 0,p3 =0;AfxMessageBox("No Color Enhancement!");}
  18. satAdj = sat;
  19. for (int i = 0 ; i < sat.rows;i ++)
  20. {
  21. for (int j = 0;j < sat.cols;j ++)
  22. {
  23. uchar val = sat.at<uchar>(i,j);
  24. satAdj.at<uchar>(i,j) = (val + p1 * val * val + p2 * val + p3) ;
  25. }
  26. }
  27. channels1.at(1) = satAdj;
  28. merge(channels1,dstMerge);
  29. cvtColor(dstMerge,dst,CV_HSV2BGR);
  30. imwrite("m_ImageCE.bmp",dst);
	Mat srcHSV,sat,satAdj,dstMerge,dst;     //sat - saturation饱和度分量
	Mat imageAwb = imread("m_ImageAwb.bmp");
	vector<Mat> channels,channels1;
	double p1,p2,p3;

	cvtColor(imageAwb,srcHSV,CV_BGR2HSV);
	split(srcHSV,channels);
	split(srcHSV,channels1);
	sat = channels.at(1);
	Scalar m = mean(sat);

	if (m(0) <= 51.5)
	{p1 = -0.002714 , p2 = 0.9498, p3 = -0.5073;  AfxMessageBox("High Color Enhancement!"); }//高
	else if (m(0) > 38.5 && m(0) <= 89.5)
	{p1 = -0.001578  , p2 = 0.6238, p3 = -0.1514;AfxMessageBox("Middle Color Enhancement!"); }//中
	else if (m(0) > 89.5 && m(0) <=127.5)
	{p1 = -0.0006512, p2 = 0.2639, p3 = -0.9246;AfxMessageBox("Low Color Enhancement!");}//低
	else
	{p1 = 0,p2 = 0,p3 =0;AfxMessageBox("No Color Enhancement!");}

	satAdj = sat;
	for (int i = 0 ; i < sat.rows;i ++)
	{
		for (int j = 0;j < sat.cols;j ++)
		{
			uchar val = sat.at<uchar>(i,j);
			satAdj.at<uchar>(i,j) = (val + p1 * val * val + p2 * val + p3) ;
		}
	}

	channels1.at(1) = satAdj;
	merge(channels1,dstMerge);
	cvtColor(dstMerge,dst,CV_HSV2BGR);
	imwrite("m_ImageCE.bmp",dst);

最后给出算法效果图:

Group1.原图->增强后

Group2.原图->R通道增强->颜色通道改变R2B

Group3.原图->增强后->颜色通道改变R2B

完!下篇讲Local Tone Mapping。

时间: 2024-10-08 16:32:21

ISP模块之色彩增强算法--HSV空间Saturation通道调整 .的相关文章

ISP模块之RAW DATA去噪(二)--BM3D算法

在正式开始本篇文章之前,让我们一起回顾一下CFA图像去噪的一些基本思路与方法.接着我会详细地和大家分享自己学习理解的BM3D算法,操作过程,它的优缺点,最后会给出算法效果图供参考. 在ISP模块里,研究者们会讨论去噪模块(Noise Reduction)到底是在去马赛克模块(Demosaic)之前还是之后进行.如果在之前处理的话,随着去噪过程的进行,噪声点消除的同时,伴随着彩色信息的损失:如果在之后,复杂的插值过程将会改变噪声的统计模型,使其变得很复杂并且难以计算.所以,更多的情况是选择在Dem

ISP模块之彩色图像增强--ACE算法 .

ACE(Automatic Color Enhancement),自动色彩增强算法,是一种对于彩色图像增强十分行之有效的方法.它的改进算法以及快速实现在文章Automatic Color Enhancement (ACE) and its Fast Implementation,2012中提出. 在NxN的图像上,ACE算法的算法复杂度为O(N^4),文章提出的新的ACE算法采取了两种近似的方法,一是采用多项式函数逼近坡度函数(Slope function)降低卷积计算量,二是采用不同程度的插值

哈工大深研院数字图像处理第二次大作业:水果自动识别(2)HSV空间聚类及SIFT算法目标识别

老规矩,直接贴报告~ Programe list: Programe was developed in the condition of Windows aswell as Linux server, programming language is Matlab (www.mathworks.com). Classify.m, Kmeans.m: function for K-means clustering. main_Kmeans.m: main function for K-means c

ISP模块之RAW DATA去噪(一)

ISP(Image Signal Processor),图像信号处理器,主要用来对前端图像传感器输出信号处理的单元,主要用于手机,监控摄像头等设备上. RAW DATA,可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据,是无损的,包含了物体原始的颜色信息等.RAW数据格式一般采用的是Bayer排列方式,通过滤波光片,产生彩色滤波阵列(CFA),鉴于人眼对绿色波段的色彩比较敏感,Bayer数据格式中包含了50%的绿色信息,以及各25%的红色和蓝色信息

关于Rocchio算法和向量空间模型反馈

什么是相关反馈以及向量空间检索模型在此不叙. Rocchio公式是这样的,省掉不相关部分,因为相关部分更重要. 有研究表明,在用户只反馈一两篇相关文档的情况下,如果用户同时标明文档中的哪些段落是相关的,并允许检索系统将相关段落而不是整个相关文档的向量表示加入到原始查询中,那么相关反馈的效果会明显提高,为什么呢? 请先看下图 标明哪些段落是相关的,也就相当于增加了相关的索引词,通过公式计算出的新的查询向量的值也就更加合理,关于相关索引词的相似度也就更大,故检索效果会显著提高. 2.同一研究表明,一

RGB空间与HSV空间的相互转换(C++实现,修正网上大多数的代码错误)

void Rgb2Hsv(float R, float G, float B, float& H, float& S, float&V) { // r,g,b values are from 0 to 1 // h = [0,360], s = [0,1], v = [0,1] // if s == 0, then h = -1 (undefined) float min, max, delta,tmp; tmp = R>G?G:R; min = tmp>B?B:tmp

基于STL的字典生成模块-模拟搜索引擎算法的尝试

该课题来源于UVA中Searching the Web的题目:https://vjudge.net/problem/UVA-1597 按照题目的说法,我对按照特定格式输入的文章中的词语合成字典,以满足后期的快速查找. 针对于字典的合成途径,我利用了STL中的map与set的嵌套形成了一种特定的数据结构来解析文章中的单词 1 #include<map> 2 #include<iostream> 3 #include<set> 4 #include<algorithm

百度算法有哪些新的调整

一.baidu加强了站点用户体会进步,对用户体会欠好的站点进行了降权.1.baidu把新站录入审阅时刻变短,呈现2-3天内就能够录入.(1)将来日期都会呈如今录入成果中,baidu为了查找成果愈加精确,引用了文章中呈现的日期,不过没有进行当天日期的对比处理.(2)baidu近来一天录入成果不精确.(3)当天主页快照,网站能有当天的主页快照,当天快照,本来只要google才有,baidu改善算法中在学习google的.2.baidu调整了对站点重复的SPAM内容站点降权.baidu关于网站的自创性

用OpenCV实现Photoshop算法(三): 曲线调整

http://blog.csdn.net/c80486/article/details/52499919 系列文章: 用OpenCV实现Photoshop算法(一): 图像旋转 用OpenCV实现Photoshop算法(二): 图像剪切 用OpenCV实现Photoshop算法(三): 曲线调整 用OpenCV实现Photoshop算法(四): 色阶调整 用OpenCV实现Photoshop算法(五): 亮度对比度调整 用OpenCV实现Photoshop算法(六): 变为黑白图像 用OpenC