数字图像处理(12):灰度二值化

  • 灰度像素:在 RGB 颜色模型下,图像中每个像素颜色的 R、G、B 三种基色的分量值相等的像素。
  • 由灰度像素组成的灰度图像只能表现256中颜色(或亮度),通常把灰度图像中像素的亮度称为灰度值。
  • 灰度化处理:是指把彩色图像转化为灰色图像的处理过程,以下为经过灰度处理后的图像。(三原色亮度相同)

(1)灰度二值化处理

图像处理的灰度二值化是图像处理中的一种重要技术,它可以将灰度图像转化为二值图像,以便于后续的处理分析;二值图像每个像素只有两个可能的值(通常是0和255)的图像,其中0表示黑色,255表示白色。因此二值图像呈现出明显的黑白效果。

(2)阈值和应用

在灰度二值化过程中,需要选择一个阈值,将灰度像素中的像素值和阈值进行比较,如果像素值大于阈值,则该像素设置为白色,反之为黑色。

灰度二值化在图像处理中由许多应用,例如:文字识别、条形码识别、图像分割,通过灰度二值化,可以将图像中的目标区域与背景区域分离开来,方便后续处理分析,同时,由于二值图像存储空间较小,因此可以减少图像处理过程中的计算量和存储成本。

(3)阈值的选取

  • 固定阈值:选择127(灰度值范围的一半)作为阈值T
  • 平均值阈值:将整张图片的灰度平均值作为二值化的阈值T
  • 双峰法:基于图像灰度直方图的二值化方法,在图像的灰度直方图中,如果物体的灰度分布比较有规律,背景和目标在图像直方图各自形成一个波峰,那么选择双峰之间的波谷灰度值作为阈值T(双峰法只适用于目标和背景的灰度值在直方图中形成两个明显的波峰的情况,如果直方图中的波峰不明显或者存在多个波峰,则双峰法可能无法取得理想的二值化效果)

(4)matlab代码实现

复制代码
% 1. 读取图像
input_path = 'D:\FPGA\Image processing\4_gray_binary\img_matlab\1_1920x1080.bmp';
output_dir = 'D:\FPGA\Image processing\4_gray_binary\img_matlab\';
img_s = imread(input_path);

% 获取图像尺寸
[height, width, ~] = size(img_s);

% 创建一个新图像
grayimg = zeros(height, width, 3, 'uint8');

% 灰度加权平均法
for i = 1:height
    for j = 1:width
        gray = 0.30 * double(img_s(i, j, 1)) + 0.59 * ...
               double(img_s(i, j, 2)) + 0.11 * double(img_s(i, j, 3));
        grayimg(i, j, :) = uint8(gray);
    end
end

% 转换为单通道灰度图
img = grayimg(:, :, 1);

% 应用5种不同的阈值方法
th1 = imbinarize(img, 127/255); % 普通二值化
th2 = ~imbinarize(img, 127/255); % 反向二值化
th3 = img; % 截断二值化
th3(th3 > 127) = 127;
th4 = img; % 低阈值零处理
th4(th4 < 127) = 0;
th5 = img; % 高阈值零处理
th5(th5 >= 127) = 0;

% 创建图像标题数组
titles = {'原始灰度图', '普通二值化', '反向二值化', '截断二值化', '低阈值零处理', '高阈值零处理'};
images = {img, th1, th2, th3, th4, th5};
filenames = {'1_原始灰度图.bmp', '2_普通二值化.bmp', '3_反向二值化.bmp', ...
             '4_截断二值化.bmp', '5_低阈值零处理.bmp', '6_高阈值零处理.bmp'};

% 直接保存单张图片,不显示
for i = 1:6
    imwrite(images{i}, fullfile(output_dir, filenames{i}));
end

% 创建并显示总览图
figure('Name', '图像二值化处理结果对比', 'NumberTitle', 'off', ...
       'Position', [100, 100, 1200, 800]);
for i = 1:6
    subplot(2, 3, i);
    imshow(images{i});
    axis image;
    title(titles{i}, 'FontSize', 12, 'FontName', '宋体');
end

% 保存总览图但不关闭窗口
saveas(gcf, fullfile(output_dir, '总览图.bmp'));

disp('所有图片已保存完成!总览图将保持显示。');

(5)测试普通二值化实验现象:

相关推荐
小蒋观天下7 小时前
两轮车检测AI摄像头——2026行业竞争格局、商业模式与核心痛点
大数据·人工智能·安全·计算机视觉·ai大模型
小蒋观天下8 小时前
两轮车检测AI摄像头——2026-2030年未来市场规模、增长逻辑与行业天花板
大数据·人工智能·安全·计算机视觉·ai大模型
狂奔蜗牛(bradley)9 小时前
拒绝SOEM黑盒!死磕EtherCAT主站:ARM+FPGA架构、DC同步与状态机修复等,50+篇实战开发文档全公开
arm开发·fpga开发·架构
美狐美颜SDK开放平台9 小时前
直播APP开发实战:从摄像头调用到视频美颜sdk集成
android·人工智能·计算机视觉·音视频·直播美颜sdk
搞科研的小刘选手11 小时前
【工程院院士领衔 | SCI期刊专题同步征稿 | 湖南长沙举办】第五届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2026)
图像处理·机器学习·计算机视觉·学术会议·会议推荐
XMAIPC_Robot11 小时前
CODESYS 实时控制 + RK182X 大模型算力扩展|RK3576 工业边缘控制器设计
人工智能·fpga开发·机器人·rk3588+fpga
初学大模型13 小时前
先剔后识:OpenCV三维预处理与YOLO语义检测协同的机器人视觉系统可行性分析
人工智能·opencv·yolo·计算机视觉·机器人
PascalXie13 小时前
水下机器人除了声纳,还能用什么感知方案?
计算机视觉·机器人
硅谷秋水13 小时前
RoboEdit:将人类操作视频转化为可扩展的机器人经验
人工智能·机器学习·计算机视觉·机器人
女神下凡14 小时前
芯参谋(31):SPI NOR Flash 电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范