MATLAB 基于阈值的图像分割

MATLAB 基于阈值的图像分割

在基于计算机的图像分析和处理中,图像分割是一项必不可少的任务。图像分割允许我们从图像中提取特定的对象或区域。在数字图像处理中,最常用的图像分割技术是基于阈值的图像分割。这种图像分割技术根据像素强度值来分离图像中的不同区域。

在本文中,我们将讨论使用MATLAB编程实现基于阈值的图像分割。但在此之前,让我们先了解阈值和其类型的基础知识。

什么是阈值

在数字图像处理中,阈值是一种根据像素强度将图像的前景和背景区域分离的方法。为此,我们需要指定一个像素强度的阈值。然后,图像处理工具(在我们的例子中是MATLAB)将像素强度高于和低于指定阈值的区域分离为两个不同的区域。

阈值类型

基于图像和图像分割的不同要求,已经开发出了几种不同的阈值技术。下面描述了这些阈值方法:

  • 全局阈值 − 在全局阈值的情况下,为整个图像分割指定一个恒定或固定的阈值值。这种阈值技术主要用于光照条件均匀的图像。

  • 自适应阈值 − 自适应阈值技术适用于光照条件不均匀且强度变化较大的图像分割。该阈值技术首先将图像分成较小的区域,然后对每个区域局部应用特定的阈值值进行分割。

  • 大津阈值 − 大津阈值技术能够根据图像自动确定一个最佳的阈值值进行分割。为此,它最大化了图像前景和背景像素值之间的类间方差。

在了解了阈值和其类型的概述之后,现在让我们学习使用MATLAB编程实现基于阈值的图像分割的实例。

示例

% MATLAB program for thresholding-based image segmentation using global thresholding
% Read the input image
img = imread('https://www.tutorialspoint.com/assets/questions/media/14304-1687425236.jpg');
% Convert the RGB image to grayscale
gray_img = rgb2gray(img);
% Compute the global threshold value
GT_value = graythresh(gray_img);
% Perform global thresholding based image segmentation
binary_img = imbinarize(gray_img, GT_value);
% Display the original and globally segmented images
subplot(1, 2, 1); imshow(img); title('Original Image');
subplot(1, 2, 2); imshow(binary_img); title('Global Segmented Image');

输出

MATLAB 基于阈值的图像分割

解释

在这个MATLAB程序中,我们演示了使用全局阈值技术进行基于阈值的图像分割的实现。

在这段代码中,我们首先读取输入图像,然后将其转换为灰度图像(如果它不是)。接下来,我们使用’graythresh’函数来确定给定图像的全局阈值值。然后,我们使用全局阈值值和’imbinarize’函数对灰度图像进行全局阈值处理。最后,我们使用’imshow’函数来显示原始图像和全局分割图像。

示例

% MATLAB program for thresholding-based image segmentation using adaptive thresholding
% Read the input image
img = imread('https://www.tutorialspoint.com/assets/questions/media/14304-1687425236.jpg');
% Convert the RGB image to grayscale
gray_img = rgb2gray(img);
% Calculate the adaptive threshold value
AT_value = adaptthresh(gray_img, 0.5); % Set the sensitivity parameter if required
% Perform adaptive thresholding-based image segmentation
adaptive_img = imbinarize(gray_img, AT_value);
% Display the original and adaptive segmented images
subplot(1, 2, 1); imshow(img); title('Original Image');
subplot(1, 2, 2); imshow(adaptive_img); title('Adaptive Segmented Image');

输出

MATLAB 基于阈值的图像分割

解释

这个MATLAB程序演示了使用自适应阈值法实现基于阈值的图像分割方法。

在这个MATLAB代码中,首先我们使用”imread”函数读取输入图像,然后如果图像不是灰度图像,将其转换为灰度图像。接下来,我们使用”adaptthresh”函数确定给定图像的自适应阈值。然后,我们使用自适应阈值和”imbinarize”函数对灰度图像进行自适应阈值分割。最后,我们使用”imshow”函数以适当的标题显示原始图像和自适应分割图像。

示例

% MATLAB program for thresholding-based image segmentation using Otsu’s thresholding
% Read the input image
img = imread('https://www.tutorialspoint.com/assets/questions/media/14304-1687425236.jpg');
% Convert the image to grayscale if required
if size(img, 3) > 1
    gray_img = rgb2gray(img);
end
% Calculate the histogram for the image
[counts, x] = imhist(gray_img, 16);
% Calculate the Otsu's thresholding value 
Otsu_value = otsuthresh(counts);
% Perform the Otsu's thresholding-based image segmentation
Otsu_img = imbinarize(gray_img, Otsu_value);
% Display the original and Otsu’s segmented image
subplot(1, 2, 1); imshow(img); title('Original Image');
subplot(1, 2, 2); imshow(Otsu_img); title('Otsu Segmented Image');

输出

MATLAB 基于阈值的图像分割

解释

这个MATLAB程序使用Otsu的阈值方法执行基于阈值的图像分割。

在这段代码中,我们首先使用’imread’函数读取输入图像,然后根据需要将其转换为灰度图像。接下来,我们使用’imhist’函数计算灰度图像的直方图,以获取图像中像素强度的信息。然后,我们使用’otsuthresh’函数计算Otsu的阈值。

接下来,我们使用’imbinarize’函数对输入图像执行基于Otsu的阈值图像分割。最后,我们调用’imshow’函数来显示原始图像和Otsu分割后的图像。

结论

因此,这就是我们如何使用MATLAB编程执行基于阈值的图像分割。MATLAB提供了三种类型的阈值,即全局阈值、自适应阈值和Otsu的阈值,用于进行图像分割。基于阈值的图像分割是图像计算机分析中的关键任务。基于阈值的图像分割是最常用的,因为它提供了从图像中提取对象/区域的简单有效的方法。此外,MATLAB提供了各种内置函数和简单的编程环境来执行基于阈值的图像分割。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程