灰度图片二值化matlab

  • Post author:
  • Post category:其他


rge图片灰度化之后,往往存在灰度值比较近的情况。根据自己的需求将灰度值调到两个极端值,也叫做阈值处理。

本文的阈值是自定义的,建立在已经读取到灰度图片灰度值的基础之上。

存在获取灰度图片最佳阈值的算法——大津法,也叫

最大类间方差法,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。

H = imread('test.png');
I = rgb2gray(H);            % 灰度化

方法1:

matlab内置函数imagesc,可以根据自定义的阈值将首尾两端的值映射到一致的值。

这是matlab提供的示例:

C = [0 2 4 6; 8 10 12 14; 16 18 20 22];
clims = [4 18];
imagesc(C,clims)
colorbar

小于4的像素块被统一映射到4,大于18的像素块被统一映射到18

采用这种方法调试灰度地图:

imagesc(I, [219, 220]);            % 读取图片灰度知道海域的灰度值是218,只需要将海域和其他障碍物区分即可
colormap(gray);
colorbar;

原图:

简单二值化:

这里存在的问题是,可行区域和障碍物的灰度值相差不大,不能真正做到二值化

而且,可行区域被设置成黑色,障碍物被设置成白色,不能随意设置。


方法2:

[m, n] = size(I);                        % 获取灰度值矩阵的行列
for i = 1:m
    for j = 1:n
        if I(i, j) == 218                % 已知可行海域灰度值为218
            I(i, j) = 255                % 可行区域设置成白色
        else
            I(i, j) = 0                  % 其他障碍物设置成黑色
        end
    end
end
imshow(I);
colorbar;

直接遍历像素矩阵,设定灰度值

结果:



版权声明:本文为qq_45053161原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。