声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 11151|回复: 25

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

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

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

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

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

使用道具 举报

发表于 2007-4-23 11:28 | 显示全部楼层
原帖由 shuangliu2005 于 2007-4-23 11:21 发表
我想把RGB图像中蓝色目标提取出来,直接在RGB空间用阈值分割时,把白色物体也分割出来了,效果不好。我想将图像转换成HSI空间,再根据H值进行分割,不知这样可否实现我的任务?同时,该用什么函数实现这一过程呢 ...

直接用类似如下形式的访问:

  1. A = imread(your_image_file);

  2. A(:,:,1) == 0 & A(:,:,2) == 0 & A(:,:,3) = 255
复制代码


[ 本帖最后由 eight 于 2007-4-23 12:39 编辑 ]
 楼主| 发表于 2007-4-23 11:53 | 显示全部楼层
能把您的省略号中的内容写出来么,烦劳您了!:@P
发表于 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');

评分

1

查看全部评分

 楼主| 发表于 2007-4-23 16:57 | 显示全部楼层
eight,我输入的是一张.JPG图像,想取蓝色目标。我按上程序运行了一下,还是不行呀,得到的图像是空白图像。:@L
发表于 2007-4-23 16:58 | 显示全部楼层



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

处理前:
abc.bmp

处理后:
abc_result.bmp

[ 本帖最后由 eight 于 2007-4-23 17:00 编辑 ]
 楼主| 发表于 2007-4-23 18:06 | 显示全部楼层
好的,我再看看,万分感谢!:@)
发表于 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;
这几句是什么意思?
发表于 2007-4-24 20:00 | 显示全部楼层
原帖由 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;
这几句是什么意思?



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

其他自己在命令窗口用一个小数据测试一下就知道了
发表于 2007-5-8 10:19 | 显示全部楼层
我想问问如果是将红色提取出来而又不是255.0.0这个数值,而且我不知道图像中红色那部分的具体RGB值,而是一个范围,那又该如何实现呢???
发表于 2007-5-8 10:30 | 显示全部楼层
原帖由 147139991 于 2007-5-8 10:19 发表
我想问问如果是将红色提取出来而又不是255.0.0这个数值,而且我不知道图像中红色那部分的具体RGB值,而是一个范围,那又该如何实现呢???



可以使用photoshop来获取RGB的颜色值;或者修改一下 A(:,:,1)==0 & A(:,:,2)==0 & A(:,:,3)==255 这个条件,范围无非是大于和小于,相信自己动手试一下就可以了
发表于 2007-5-15 12:55 | 显示全部楼层
先十分感谢eight!!!然后我想问下怎么将RGB转换成HSI格式的,转换后又如何将红色的部分提取出来呢????望指教!!!!
abc.jpg
发表于 2007-5-15 15:19 | 显示全部楼层
原帖由 147139991 于 2007-5-15 12:55 发表
先十分感谢eight!!!然后我想问下怎么将RGB转换成HSI格式的,转换后又如何将红色的部分提取出来呢????望指教!!!!



hsv 吧,help hsv2rgb, rgb2hsv 。至于提取红色部分,我觉得原理应该和RGB一样
发表于 2007-5-15 17:05 | 显示全部楼层
原帖由 eight 于 2007-5-15 15:19 发表



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


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

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-18 07:08 , Processed in 0.097886 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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