图像量化为3值灰度图像

时间:2017-01-25 20:11:03

标签: matlab image-processing

我从物理建模器中获取带有默认色彩映射的图像,如下所示:

leelo color map

我将其转换为3值灰度图像,因为我知道有三个不同的阶段:

3 value grayscale

以下是我的算法片段,用于根据RGB分析确定像素排序:

[RGB_IMAGE_ARRY{j},map] = imread(fname);       
RGB=ind2rgb(RGB_IMAGE_ARRY{j},map);
R=RGB(:,:,1);
G=RGB(:,:,2);
B=RGB(:,:,3);

GRAYSCALE_VALUE=zeros(nx,ny);

for X=1:nx
    for Y=1:ny
             if ((R(X,Y)>0))
                GRAYSCALE_VALUE(X,Y)=128;

             elseif ( ...
                      (R(X,Y)==0)&& ...
                      (G(X,Y)==0)&& ...
                      (B(X,Y)==0.50)...
                    )
                GRAYSCALE_VALUE(X,Y)=0;

             elseif  ( ...
                     (R(X,Y)==0)&& ...
                     (G(X,Y)>=0)&& ...
                     (B(X,Y)>=0.50))
                GRAYSCALE_VALUE(X,Y)=255;
             end
    end
end

我在尝试使用MATLAB的阈值化量化函数后,做到了这一点。它对我有用,但我想知道是否有一个更优雅的解决方案来获得相同的结果(而不是通过for循环遍历所有像素)。

1 个答案:

答案 0 :(得分:1)

通过使用logical indexing

,您的循环可以替换为以下两行
GRAYSCALE_VALUE(R > 0) = 128;
GRAYSCALE_VALUE((R == 0) & (B >= 0.5)) = 255;