如何对RGB图像实现基于颜色的目标提取?
我想把RGB图像中蓝色目标提取出来,直接在RGB空间用阈值分割时,把白色物体也分割出来了,效果不好。我想将图像转换成HSI空间,再根据H值进行分割,不知这样可否实现我的任务?同时,该用什么函数实现这一过程呢?万分感谢! 原帖由 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 编辑 ] 能把您的省略号中的内容写出来么,烦劳您了!:@P 原帖由 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'); eight,我输入的是一张.JPG图像,想取蓝色目标。我按上程序运行了一下,还是不行呀,得到的图像是空白图像。:@L 原帖由 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 编辑 ] 好的,我再看看,万分感谢!:@) 八,
我想问问>> 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;
这几句是什么意思? 原帖由 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的所有下标
其他自己在命令窗口用一个小数据测试一下就知道了 我想问问如果是将红色提取出来而又不是255.0.0这个数值,而且我不知道图像中红色那部分的具体RGB值,而是一个范围,那又该如何实现呢??? 原帖由 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 这个条件,范围无非是大于和小于,相信自己动手试一下就可以了 先十分感谢eight!!!然后我想问下怎么将RGB转换成HSI格式的,转换后又如何将红色的部分提取出来呢????望指教!!!! 原帖由 147139991 于 2007-5-15 12:55 发表 http://www.chinavib.com/forum/images/common/back.gif
先十分感谢eight!!!然后我想问下怎么将RGB转换成HSI格式的,转换后又如何将红色的部分提取出来呢????望指教!!!!
hsv 吧,help hsv2rgb, rgb2hsv 。至于提取红色部分,我觉得原理应该和RGB一样 原帖由 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度是红色部分!!!
非常感谢你的帮助!!!!!
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