shuangliu2005 发表于 2007-4-23 11:21

如何对RGB图像实现基于颜色的目标提取?

我想把RGB图像中蓝色目标提取出来,直接在RGB空间用阈值分割时,把白色物体也分割出来了,效果不好。我想将图像转换成HSI空间,再根据H值进行分割,不知这样可否实现我的任务?同时,该用什么函数实现这一过程呢?万分感谢!

eight 发表于 2007-4-23 11:28

原帖由 shuangliu2005 于 2007-4-23 11:21 发表
我想把RGB图像中蓝色目标提取出来,直接在RGB空间用阈值分割时,把白色物体也分割出来了,效果不好。我想将图像转换成HSI空间,再根据H值进行分割,不知这样可否实现我的任务?同时,该用什么函数实现这一过程呢 ...
直接用类似如下形式的访问:
A = imread(your_image_file);

A(:,:,1) == 0 & A(:,:,2) == 0 & A(:,:,3) = 255

[ 本帖最后由 eight 于 2007-4-23 12:39 编辑 ]

shuangliu2005 发表于 2007-4-23 11:53

能把您的省略号中的内容写出来么,烦劳您了!:@P

eight 发表于 2007-4-23 15:18

原帖由 shuangliu2005 于 2007-4-23 11:53 发表
能把您的省略号中的内容写出来么,烦劳您了!:@P

>> A=imread(your_image_file);
>> H = size(A);
>> BB=repmat(255, H(1)*H(2), H(3));
>> C=(A(:,:,1)==0 & A(:,:,2)==0 & A(:,:,3)==255);
>> BB(C,1) = 0;
>> BB(C,2) = 0;
>> B = reshape(BB, H(1), H(2), H(3));
>> imwrite(B,'result.bmp');

shuangliu2005 发表于 2007-4-23 16:57

eight,我输入的是一张.JPG图像,想取蓝色目标。我按上程序运行了一下,还是不行呀,得到的图像是空白图像。:@L

eight 发表于 2007-4-23 16:58

原帖由 shuangliu2005 于 2007-4-23 16:57 发表 http://forum.vibunion.com/forum/images/common/back.gif
eight,我输入的是一张.JPG图像,想取蓝色目标。我按上程序运行了一下,还是不行呀,得到的图像是空白图像。:@L


先读懂程序,然后自己修改一下吧。或许你的图象中,要提取的蓝色目标的RGB颜色值并非(0,0,255),所以要调整一下。以下是我测试的结果

处理前:


处理后:


[ 本帖最后由 eight 于 2007-4-23 17:00 编辑 ]

shuangliu2005 发表于 2007-4-23 18:06

好的,我再看看,万分感谢!:@)

cecilie 发表于 2007-4-24 19:57

八,
我想问问>> BB=repmat(255, H(1)*H(2), H(3));
>> C=(A(:,:,1)==0 & A(:,:,2)==0 & A(:,:,3)==255);
>> BB(C,1) = 0;
>> BB(C,2) = 0;
这几句是什么意思?

eight 发表于 2007-4-24 20:00

原帖由 cecilie 于 2007-4-24 19:57 发表 http://forum.vibunion.com/forum/images/common/back.gif
八,
我想问问>> BB=repmat(255, H(1)*H(2), H(3));
>> C=(A(:,:,1)==0 & A(:,:,2)==0 & A(:,:,3)==255);
>> BB(C,1) = 0;
>> BB(C,2) = 0;
这几句是什么意思?


第二句:寻找三维矩阵A中的第一维元素为0、第二维为0、第三维为255的所有下标

其他自己在命令窗口用一个小数据测试一下就知道了

147139991 发表于 2007-5-8 10:19

我想问问如果是将红色提取出来而又不是255.0.0这个数值,而且我不知道图像中红色那部分的具体RGB值,而是一个范围,那又该如何实现呢???

eight 发表于 2007-5-8 10:30

原帖由 147139991 于 2007-5-8 10:19 发表 http://forum.vibunion.com/forum/images/common/back.gif
我想问问如果是将红色提取出来而又不是255.0.0这个数值,而且我不知道图像中红色那部分的具体RGB值,而是一个范围,那又该如何实现呢???


可以使用photoshop来获取RGB的颜色值;或者修改一下 A(:,:,1)==0 & A(:,:,2)==0 & A(:,:,3)==255 这个条件,范围无非是大于和小于,相信自己动手试一下就可以了

147139991 发表于 2007-5-15 12:55

先十分感谢eight!!!然后我想问下怎么将RGB转换成HSI格式的,转换后又如何将红色的部分提取出来呢????望指教!!!!

eight 发表于 2007-5-15 15:19

原帖由 147139991 于 2007-5-15 12:55 发表 http://www.chinavib.com/forum/images/common/back.gif
先十分感谢eight!!!然后我想问下怎么将RGB转换成HSI格式的,转换后又如何将红色的部分提取出来呢????望指教!!!!


hsv 吧,help hsv2rgb, rgb2hsv 。至于提取红色部分,我觉得原理应该和RGB一样

147139991 发表于 2007-5-15 17:05

原帖由 eight 于 2007-5-15 15:19 发表 http://www.chinavib.com/forum/images/common/back.gif



hsv 吧,help hsv2rgb, rgb2hsv 。至于提取红色部分,我觉得原理应该和RGB一样

i=imread('789.jpg');
I=rgb2hsv(i);
imshow(I)
是这个程序把RGB形式的转换成HSI格式的吗???
但是得到的图像颜色发生了很大的变化....
要是正确的话那如何把原来的红色部分提取出来呢???
我知道由0度到30度和330度到360度是红色部分!!!
非常感谢你的帮助!!!!!

shuangliu2005 发表于 2007-5-16 10:55

rgb2hsv函数中H值与HSV模型中H值有什么对应关系呢?

楼上的同学,你那样肯定是不行。如果你想要变换后,显示原图的话代码如下:

rgb=imread('filename');
hsv=rgb2hsv(rgb);
i=hsv2rgb(hsv1)       ;%加上这个函数
imshow(i)

再想请问一下:
运用RGB2HSV得到的H值是0与1之间的,那它与HSV模型中H值不对应呀,之间还有什么关系么,因为模型中H值是0~360度啊,谢谢!

[ 本帖最后由 eight 于 2007-5-17 21:17 编辑 ]
页: [1] 2
查看完整版本: 如何对RGB图像实现基于颜色的目标提取?