我有一些图像并希望检测红色物体。但是在蓝色物体周围有一个红色的阴影,它被检测到并且不是真的。我如何通过过滤或处理图像来去除这些红色阴影。任何Matlab命令或技术提示将不胜感激。 感谢删除RGB图像中物体周围的阴影
这是不必要的红色阴影的样本对象: http://tinypic.com/view.php?pic=o7rmsg&s=8
我把边框不必要的红色阴影的位置: http://tinypic.com/view.php?pic=28jefec&s=8
我有一些图像并希望检测红色物体。但是在蓝色物体周围有一个红色的阴影,它被检测到并且不是真的。我如何通过过滤或处理图像来去除这些红色阴影。任何Matlab命令或技术提示将不胜感激。 感谢删除RGB图像中物体周围的阴影
这是不必要的红色阴影的样本对象: http://tinypic.com/view.php?pic=o7rmsg&s=8
我把边框不必要的红色阴影的位置: http://tinypic.com/view.php?pic=28jefec&s=8
我假定你正在做某种颜色的分割并可以得到一个二值图像(BW
),显示图像中检测到的所有“红色物体”,其中一些是您的真实物体,另一些是阴影。
在这种情况下,使用regionprops
可以很容易地对检测到的对象的性质进行一些检查,以滤除不正确的匹配。
stats = regionprops(BW,'basic'); % 'basic', 'all', or specific list of properties to measure
例如,如果检测到“红色阴影”地区在总体上比你在寻找真正的对象总是要小很多,你可以检查'Area'
财产,并删除任何检测到的部位其别不适合。或者,您可以计算一些其他形状的度量(例如,'Eccentricity'
或‘Solidity’
),例如如果你的真实物体大致是圆形的和坚实的,那么应该很容易区分你在示例图像中显示的那种区域。
I=imread('http://oi62.tinypic.com/o7rmsg.jpg');
I=imcrop(I,[200 100 400 250]);
Ir=I(:,:,1);
Ig=I(:,:,2);
Ib=I(:,:,3);
I1=Ib-Ir;
bw=im2bw(I1,graythresh(I1));
I2(:,:,1)=Ir.*uint8(bw);
I2(:,:,2)=Ig.*uint8(bw);
I2(:,:,3)=Ib.*uint8(bw);
imshow(I2)
感谢这段代码,但问题是不裁剪蓝色区域看这个图像http://tinypic.com/view.php?pic=2zefsc8&s=8绿色箭头显示所需的对象红色箭头显示那些太褪色的色调太淡在这个样本图像中,但在一些图像中,像在主文章中上传的图像更强烈并且被检测为期望的对象。这种色调存在于黄色或浅橙色背景上的蓝色物体周围。我寻找像锐化或褪色这样的滤镜,可以消除那些红色阴影而不是红色的所需对象。 –
因为我想消除那些红色阴影和处理图像,因为我现在正在做的是成功找到所需的对象,但是这个过程也找到阴影。除了需要的物体之外,只需要去除阴影就不会被检测到。 –
把你的图像,并将其转换成它的灰度等效的。 现在将一般阈值应用于此图像或应用具有特定值/百分比的阈值。通过这样做,小的不需要的红色像素被消除,现在将您的新图像转换回rgb格式。您也可以尝试使用一些过滤器。
感谢您的提示是正好我想做一个分割,我成功地做到了,但现在这些阴影也被检测到,我有消除它们的问题。我期望的物体具有广泛的变化形式,不幸的是,它们中的大部分都是弯曲的并且非常类似于这种红色阴影。我上传另一张包含所需对象的图片:http://tinypic.com/view.php?pic=2zefsc8&s=8#.UvVRjLSwROw。 –