HSV彩色空间怎么判断颜色接近度?

kingofmatch 2009-07-03 06:43:13
请问HSV彩色空间怎么判断颜色接近度啊?

RGB彩色空间可以算 dR^2+dG^2+dB^2 再开方来得到接近度,那HSV怎么判断呢?
...全文
372 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
tan34035 2009-07-03
  • 打赏
  • 举报
回复
任何一个判断都是人设定的,首先看转换算法

 RGB转化到HSV的算法
  max=max(R,G,B)
  min=min(R,G,B)
  if R = max, H = (G-B)/(max-min)
  if G = max, H = 2 + (B-R)/(max-min)
  if B = max, H = 4 + (R-G)/(max-min)
  H = H * 60
  if H < 0, H = H + 360
  V=max(R,G,B)
  S=(max-min)/max
  HSV转化到RGB的算法
  if s = 0
  R=G=B=V
  else
  H /= 60;
  i = INTEGER(H)
  f = H - i
  a = V * ( 1 - s )
  b = V * ( 1 - s * f )
  c = V * ( 1 - s * (1 - f ) )
  switch(i)
  case 0: R = V; G = c; B = a;
  case 1: R = b; G = v; B = a;
  case 2: R = a; G = v; B = c;
  case 3: R = a; G = b; B = v;
  case 4: R = c; G = a; B = v;
  case 5: R = v; G = a; B = b;

如果楼主不怕麻烦的话,硬是要生搬硬套,那就从HSV转化到RBG空间,再按照你的判断依据判断。
或者理解清楚HSV三个符号的含义我们可以自己定义一个判别表达式:

首先
H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。
纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。
V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。

我给出两个定义相似度公式(随便用哪个都可以)
公式1:p = |v1-v2| * ( 1 - |s1-s2|)* (1-max(h2 - h1|,|h1 - h2|)/360);

公式2:p = a|v1-v2| + b( 1 - |s1-s2|)+ c(1-max(h2 - h1|,|h1 - h2|)/360);

公式2中a,b,c为三个部分的权,根据实际情况我可以假定(仅为我根据公式的猜测),a=1, b=200, c=200;根据abc的设定可以改变hsv在相似度认定中所占的比重。

以上两个公式都是p越小则越相似,LZ也可以自己定义相似度公式,但是要有一定的依据。LZ如果还有什么问题可以进一步交流

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧