如何检测图像中的银像素?

时间:2018-03-11 13:32:43

标签: matlab image-processing rgb pixel hsv

我正试图在我的图像中检测到银色的所有像素。 我试图将图像从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);

使用此图片:

https://i.stack.imgur.com/uuhqA.jpg

提前致谢。

1 个答案:

答案 0 :(得分:0)

白色像素和灰色像素之间的差异是落在其上的光量。您可以在图片中看到这一点,白色背景从左到右改变亮度,从中间灰色变为浅灰色。我们认为这一切都是白色的。

白银也是如此。银色是白色/灰色,但我们对它的看法不同,因为它具有镜面反射。这就是金属表面的特征。但是像素本身的颜色只是灰色和白色。

也就是说,您不能使用颜色分割来区分银色触点和白纸。

我建议你寻找感兴趣的形状,而不是感兴趣的颜色。