我正试图在我的图像中检测到银色的所有像素。 我试图将图像从RGB转换为HSV但我看到每个银像素都与另一个非常不同,因此我们无法识别所有的银像素。 我试图了解是否可以使用HSV来解决这个问题,或者是否有更好的方法来检测所有的银像素?
我正在尝试使用此代码将所有银色像素标记为蓝色:
我根据维基百科选择了色调,饱和度和值(HSV)以识别银色,因此Hue无关紧要,饱和度为0-0.1,值为0.65-0.85。
clear all; close all; clc; imtool close all;
im = imread('image.jpg');
size_x = size(im,1);
size_y = size(im,2);
size_z = size(im,3);
hsv = rgb2hsv(im);
for i = 1:size_x
for j = 1:size_y
if (hsv(i,j,2) < 0.1) && (hsv(i,j,3) > 0.65) && (hsv(i,j,3) < 0.85)
im(i,j,1) = 0;
im(i,j,2) = 0;
im(i,j,3) = 255;
end
end
end
imtool(im);
使用此图片:
提前致谢。
答案 0 :(得分:0)
白色像素和灰色像素之间的差异是落在其上的光量。您可以在图片中看到这一点,白色背景从左到右改变亮度,从中间灰色变为浅灰色。我们认为这一切都是白色的。
白银也是如此。银色是白色/灰色,但我们对它的看法不同,因为它具有镜面反射。这就是金属表面的特征。但是像素本身的颜色只是灰色和白色。
也就是说,您不能使用颜色分割来区分银色触点和白纸。
我建议你寻找感兴趣的形状,而不是感兴趣的颜色。