Color Segmentation(图像色彩分离,RGB以及HSI 空间) RGB space 通过计算每个像素点与选定颜色在RGB色彩空间中的点的距离来选择是否保留该像素点,所有保留的像素点组成的图片就只包含要提取的颜色,再将所有保留的像素点的R,G,B值单独提取出来即可获得需要分离的颜色的R,G,B图片。 算法流程如下: 1)确定我们需要的分离的颜色,a 2)对图片中每个像素点计算D(z,a) 3)如果D(z,a) <= D0 ,则 I(R,G,B)=1,否则I(R,G,B)=0 算法中,D0 需要我们去实验确定,找出能较好提取出要提取的颜色的距离值。函数I(R,G,B)则是用来确定是否保留该像素点信息。 实验结果如下: 原图: 提取红色后结果: matlab 实现代码:
im= imread( ) ;
figure, imshow( im)
im= double( im) ;
color= [ 255 , 0 , 0 ] ;
[ m, n, dims] = size( im) ;
d0= 130 ;
R= zeros( m, n, dims) ;
G= zeros( m, n, dims) ;
B= zeros( m, n, dims) ;
for i= 1 : m
for j= 1 : n
if sqrt( ( im( i, j, 1 ) - color( 1 ) ) ^ 2 + ( im( i, j, 2 ) - color( 2 ) ) ^ 2 + ( im( i, j, 3 ) - color( 3 ) ) ^ 2 ) <= d0
R( i, j, 1 ) = im( i, j, 1 ) ;
G( i, j, 2 ) = im( i, j, 2 ) ;
B( i, j, 3 ) = im( i, j, 3 ) ;
end
end
end
img= R+ G+ B;
R= uint8( R) ;
G= uint8( G) ;
B= uint8( B) ;
img= uint8( img) ;
figure, imshow( R)
figure, imshow( G)
figure, imshow( B)
figure, imshow( img)