声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1773|回复: 10

[图像处理] 如何将图像色彩量化

[复制链接]
发表于 2007-4-27 10:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
颜色空间选取HSV颜色空间进行彩色图像检索。
   为了取得检索效果与检索时间的良好平衡,采用如下简单快捷的量化方法:

                               
登录/注册后可看大图

                               
登录/注册后可看大图


                               
登录/注册后可看大图
{CDB3352F-2AB3-46FC-B915-7ED17E45972F}.BMP (121.23 KB)
2007-4-25 15:41


         

                               
登录/注册后可看大图

                               
登录/注册后可看大图


                               
登录/注册后可看大图
{BAD15294-40F6-42FE-A39B-72780AD78CE2}.BMP (128.35 KB)
2007-4-25 15:41



接下来,将量化后的3个颜色分量HSV组合成1维待征颜色分量L,并用于特征提取。
         

                               
登录/注册后可看大图

                               
登录/注册后可看大图


                               
登录/注册后可看大图
{DBB89FD2-8A77-4118-B952-9998671D4D10}.BMP (127.67 KB)
2007-4-25 15:41



其中,[a]表示不小于a的的最小整数。
回复
分享到:

使用道具 举报

 楼主| 发表于 2007-4-27 11:16 | 显示全部楼层
如何将此程序化啊?
 楼主| 发表于 2007-5-10 21:26 | 显示全部楼层
我发现在图像的H值<1,所以重新定义H的划分范围,做出来的无法通过,请高手帮我一下!
解解小弟的困惑啊
i=imread('kids.tif');
[h,s,v]=RGB2HSV(i);
  if(h>0&&h<=0.125)H=0;
elseif(h>0.125&&h<0.250)H=1;
elseif(h>0.250&&h<=0.375)H=2;
elseif(h>0.375&&h<=0.500)H=3;
elseif(h>0.500&&h<=0.625)H=4;
elseif(h>0.625&&h<=0.750)H=5;
else H=6;
end
发表于 2007-5-10 21:40 | 显示全部楼层
试试:

  1. i=imread('kids.tif');
  2. [h,s,v]=RGB2HSV(i);
  3. H = zeros(size(h));
  4. H(h>0&h<=0.125) = 0;
复制代码


其余情况类似

评分

1

查看全部评分

 楼主| 发表于 2007-5-12 08:43 | 显示全部楼层
感谢,万分感谢,
但是L可不可以像下面一样表示
L=zeros(size(h));
L(v<0.2)=0;
L(s<0.2&v>=0.2)=(V-0.2)*7/0.8;
L(s>=0.2&v>=0.2)=4H+2S+V+8;
这样好像有点错误.

"其中,[a]表示不小于a的的最小整数。"这个又如何表示啊?
请高手帮帮忙啊.解救小弟啊!

[ 本帖最后由 2364288 于 2007-5-12 08:56 编辑 ]
发表于 2007-5-12 10:16 | 显示全部楼层
原帖由 2364288 于 2007-5-12 08:43 发表
感谢,万分感谢,
但是L可不可以像下面一样表示
L=zeros(size(h));
L(v=0.2&v>=0.2)=4H+2S+V+8;
这样好像有点错误.

"其中,[a]表示不小于a的的最小整数。"这个又如何表示啊?
请高手帮帮忙啊.解救小弟啊!


1. 不行,请阅读matlab基础书
2. help floor
 楼主| 发表于 2007-5-12 14:06 | 显示全部楼层
L=zeros(size(h));
L(v<0.200)=0;
L(s<0.200&v>=0.200)=floor((V-0.2).*7/0.8);
L(s>=0.200&v>=0.200)=4*H+2*S+V+8;


???  In an assignment  A(I) = B, the number of elements in B and
I must be the same.

Error in ==> D:\MATLAB\work\secailianghua.m
On line 23  ==> L(s<0.200&v>=0.200)=floor((V-0.2).*7/0.8);
发表于 2007-5-12 14:14 | 显示全部楼层
原帖由 2364288 于 2007-5-12 14:06 发表
L=zeros(size(h));
L(v=0.200&v>=0.200)=4*H+2*S+V+8;


???  In an assignment  A(I) = B, the number of elements in B and
I must be the same.

Error in ==> D:MATLABworksecailianghua.m
On  ...



我不是跟你说了 不行 吗
 楼主| 发表于 2007-5-13 16:53 | 显示全部楼层
能不能给一些建设性的提议啊,让小弟脱离苦海!

[ 本帖最后由 eight 于 2007-5-13 23:49 编辑 ]
发表于 2007-5-13 23:50 | 显示全部楼层
原帖由 2364288 于 2007-5-13 16:53 发表
能不能给一些建设性的提议啊,让小弟脱离苦海!


不太明白你的目的,试试如下代码:

  1. ind = s<0.200&v>=0.200;
  2. L(ind)=floor((V(ind)-0.2).*7/0.8);

复制代码
 楼主| 发表于 2007-5-14 21:03 | 显示全部楼层
多谢,这倒提醒了我,要把V当成函数来对待.
不过,最后得到的L的值都是零,看来最初的量化有问题,或者是图像有问题.

[ 本帖最后由 eight 于 2007-5-14 21:44 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-3 04:36 , Processed in 0.060863 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表