[英]Single Color Enhancement - MATLAB
我正在用Matlab编写RED交通灯检测器,并认为要做的第一件事就是增强输入RGB图像中的红色。
到目前为止,这是我使用的代码:
img_hsv = rgb2hsv(img_rgb);
h_channel = img_hsv(:,:,1);
s_channel = img_hsv(:,:,2);
v_channel = img_hsv(:,:,3);
s_channel = s_channel * 10;
img_hsv_enhanced = cat(3,h_channel,s_channel,v_channel);
img_rgb_enhanced = hsv2rgb(img_hsv_enhanced);
这是图像增强的结果:
我有3个问题:
到目前为止,我编写的代码是执行此操作的最佳方法吗? 即我已经增强了图像的饱和度,是否应该在其他频道上工作?
此代码导致所有3种颜色都得到增强,我如何才能选择性地仅增强红色通道?
使用函数hsv2rgb
转换回rgb后,我的图像像素不再在[0,1]或[0,255]范围内,而是假定为十进制值,有时甚至为负数。 我该如何解决并将其恢复为[0 255]?
仅要增强红色通道,应使用RGB而不是HSV。 您可以执行以下操作:
r_channel = img_rgb(:,:,1); r_channel = uint8(double(r_channel * 2));
但是,您应该注意,这也可能导致您最重要的频道中的信息丢失,如上一项所述。
这是由于当您计算s_channel = s_channel * 10;
时,饱和度值超过1引起的s_channel = s_channel * 10;
。 尝试添加s_channel = s_channel / max(s_channel(:));
在那条线之后。 hsv2rgb的输出图像应在[0,1]范围内。 从那里通过重新缩放将其恢复为[0 255]。 确保将图像也恢复为原始数据类型(很可能是uint8): img_rgb_enhanced = uint8(img_rgb_enhanced * 255);
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.