用matlab实现自适应图像阈值分割最大类方差法代码

合集下载

大津法matlab

大津法matlab

大津法matlab大津法是一种图像二值化的方法,它能够自动确定合适的阈值进行图像的二值化处理。

以下是在Matlab中实现大津法的步骤:Step 1:读入待处理的灰度图像。

Step 2:计算图像的直方图。

Step 3:初始化最佳阈值为0,最大类间方差为0。

Step 4:计算每个可能的阈值的类间方差。

Step 5:找到使类间方差最大化的阈值。

Step 6:使用最佳阈值将图像二值化。

Matlab代码实现:% Step 1:读入待处理的灰度图像I = imread('image.jpg'); % 读入图像Igray = rgb2gray(I); % 将图像转化为灰度图% Step 2:计算图像的直方图counts = imhist(Igray); % 计算灰度直方图% Step 3:初始化最佳阈值为0,最大类间方差为0bestT = 0; % 最佳阈值maxVar = 0; % 最大类间方差% Step 4:计算每个可能的阈值的类间方差totalPixels = numel(Igray); % 总像素数for threshold = 1:255% 计算类1(低灰度)的像素个数和概率counts1 = sum(counts(1:threshold));p1 = counts1 / totalPixels;% 计算类2(高灰度)的像素个数和概率counts2 = sum(counts(threshold+1:end));p2 = counts2 / totalPixels;% 计算类1和类2的均值mean1 = sum((0:threshold-1) .* counts(1:threshold)) / counts1;mean2 = sum((threshold:255) .*counts(threshold+1:end)) / counts2;% 计算类间方差varB = p1 * p2 * (mean1 - mean2)^2;% 更新最佳阈值和最大类间方差if varB > maxVarmaxVar = varB;bestT = threshold;endend% Step 5:找到使类间方差最大化的阈值% Step 6:使用最佳阈值将图像二值化Ibinary = imbinarize(Igray, bestT/255); % 将图像二值化imshow(Ibinary); % 显示处理后的图像以上就是在Matlab中实现大津法的步骤和代码实现。

在Matlab中实现图像分割和目标检测的方法

在Matlab中实现图像分割和目标检测的方法

在Matlab中实现图像分割和目标检测的方法图像处理领域是计算机科学中的一个重要研究方向,其中图像分割和目标检测是最核心也是最具挑战性的任务之一。

Matlab是一个强大的数学计算软件,在图像处理领域有着广泛的应用。

本文将介绍在Matlab中实现图像分割和目标检测的方法。

一、图像分割1. 基于阈值的分割方法基于阈值的分割是最简单的图像分割方法之一。

它通过设定一个或多个阈值,将图像中的像素分为不同的类别。

在Matlab中,可以使用imbinarize函数实现二值化分割,也可以使用graythresh函数自动计算阈值。

2. 基于边缘的分割方法基于边缘的分割是一种常用的分割方法,它通过检测图像中的边缘来实现图像的分割。

在Matlab中,可以使用edge函数实现边缘检测,可以选择不同的算法进行边缘检测,如Sobel、Prewitt等。

3. 基于区域的分割方法基于区域的分割方法将图像中的像素划分为不同的区域,每个区域具有相似的属性,如灰度值、纹理等。

在Matlab中,可以使用regiongrowing函数或者watershed函数实现基于区域的分割。

二、目标检测1. 基于颜色特征的目标检测方法基于颜色特征的目标检测方法将目标物体和背景物体通过颜色的差异进行区分。

在Matlab中,可以使用colorthresh函数实现基于颜色特征的目标检测。

该函数可以根据不同颜色空间(如RGB、HSV等)来进行分割,选择合适的颜色阈值可以实现目标的检测。

2. 基于形状特征的目标检测方法基于形状特征的目标检测方法通过分析目标的形状信息来进行检测。

在Matlab 中,可以使用regionprops函数计算图像中的区域属性,如面积、周长、中心点等。

通过对这些属性的分析,可以实现目标的检测。

3. 基于纹理特征的目标检测方法基于纹理特征的目标检测方法通过分析目标和背景的纹理信息来进行检测。

在Matlab中,可以使用texturefilt函数进行纹理特征的提取,可以选择不同的滤波器(如高斯、拉普拉斯等)来提取不同的纹理特征。

matlab大津法二值化函数

matlab大津法二值化函数

matlab大津法二值化函数大津法是一种常用于图像二值化的自适应阈值方法,其原理是通过计算图像的灰度直方图,找到一个最佳的阈值将图像分为两个类别。

在MATLAB中,我们可以使用`graythresh`函数来实现大津法二值化。

大津法的主要思想是通过最小化类内方差和最大化类间方差,来选择最佳的阈值。

具体而言,我们需要计算不同阈值下的类内方差和类间方差,并选择使得类间方差最大的阈值作为最佳阈值。

我们需要读取待处理的图像。

在MATLAB中,我们可以使用`imread`函数来读取图像文件。

读取完成后,我们可以使用`imshow`函数来显示图像,以便我们查看原始图像的情况。

接下来,我们需要将彩色图像转换为灰度图像。

在MATLAB中,我们可以使用`rgb2gray`函数来实现这一转换。

转换后的灰度图像只有一个通道,每个像素的灰度值表示了该像素的亮度。

然后,我们可以使用`imhist`函数计算灰度图像的直方图。

直方图是一种统计图,它可以显示不同灰度级别的像素数量。

通过观察直方图,我们可以了解图像的灰度分布情况。

接下来,我们需要计算不同阈值下的类内方差和类间方差。

类内方差表示了同一类别内像素灰度值的变化程度,而类间方差表示了不同类别之间像素灰度值的差异程度。

在MATLAB中,我们可以使用`graythresh`函数来计算不同阈值下的类内方差和类间方差。

我们选择使得类间方差最大的阈值作为最佳阈值,并将图像根据该阈值进行二值化处理。

在MATLAB中,我们可以使用`imbinarize`函数来实现图像的二值化。

二值化后的图像中,灰度值大于等于阈值的像素被设为1,灰度值小于阈值的像素被设为0。

通过以上步骤,我们可以使用MATLAB实现大津法对图像的二值化处理。

在实际应用中,大津法可以帮助我们提取图像中的目标对象,方便进行后续的图像分析和处理。

总结起来,大津法是一种常用的图像二值化方法,通过计算灰度直方图,选择使得类间方差最大的阈值来实现图像的二值化。

matlab自适应阈值分割

matlab自适应阈值分割

matlab自适应阈值分割
在MATLAB中,可以使用函数`imbinarize`进行自适应阈值分割。

该函数可以根据图像的局部统计信息自动计算合适的阈值进行分割。

下面是一个使用`imbinarize`函数进行自适应阈值分割的例子:
读取图像
I = imread('image.jpg');
将图像转换为灰度图像
grayImage = rgb2gray(I);
自适应阈值分割
threshold = adaptthresh(grayImage);
binaryImage = imbinarize(grayImage, threshold);
显示结果
subplot(1, 2, 1);
imshow(grayImage);
title('原始图像');
subplot(1, 2, 2);
imshow(binaryImage);
title('自适应阈值分割结果');
在上面的例子中,首先读取图像并将其转换为灰度图像。

然后使用`adaptthresh`函数计算自适应阈值。

最后使用`imbinarize`函数将图像二值化,根据计算得到的阈值进行分割。

最终的结果通过显示函数显示出来。

`imbinarize`函数还可以接受其他参数,如指定阈值类型和输出类型等。

具体可以参考MATLAB的文档来了解更多细节。

MATLAB图像分割代码

MATLAB图像分割代码

[matlab图像处理]阈值分割%迭代式阈值分割otsu阈值分割二值化close all;%关闭所有窗口clear;% 清除变量的状态数据clc;% 清除命令行I=imread('rice.png');subplot(2,2,1);imshow(I);title('1 rice的原图');%迭代式阈值分割zmax=max(max(I));% 取出最大灰度值zmin=min(min(I));%取出最小灰度值tk=(zmax+zmin)/2;bcal=1;[m,n]=size(I);while(bcal)%定义前景和背景数iforeground=0;ibackground=0;%定义前景和背景灰度总和foregroundsum=0;backgroundsum=0;for i=1:mfor j=1:ntmp=I(i,j);if(tmp>=tk)%前景灰度值iforeground=iforeground+1;foregroundsum=foregroundsum+double(tmp );elseibackground=ibackground+1;backgroundsum=backgroundsum+double(tmp );endendend%计算前景和背景的平均值z1=foregroundsum/iforeground;z2=foregroundsum/ibackground;tktmp=uint8((z1+z2)/2);if(tktmp==tk)bcal=0;elsetk=tktmp;end%当阈值不再变化时, 说明迭代结束enddisp(strcat(' 迭代的阈值迭代的阈值: 阈值:',num2str(tk)));%在 command window里显示出:newI=im2bw(I,double(tk)/255);%函数 im2bw 使用阈值( threshold )变换法把灰度图像( grayscale image)%转换成二值图像。

如何在Matlab中进行图像分割

如何在Matlab中进行图像分割

如何在Matlab中进行图像分割图像分割是图像处理中十分重要的一项技术,它能够将图像划分为多个具有独立意义的区域,有助于进一步的图像分析和处理。

在Matlab中进行图像分割,我们可以利用许多现成的函数和工具箱,使得整个过程更加高效和便捷。

本文将介绍如何在Matlab中进行图像分割,包括基于阈值的分割方法、基于边缘的分割方法以及基于区域的分割方法。

首先,基于阈值的分割方法是最简单和常用的图像分割方法之一。

它基于图像的亮度或颜色信息,将图像分为不同的区域。

在Matlab中,我们可以使用im2bw 函数将彩色图像转换为二值图像,然后使用graythresh函数或multithresh函数确定适当的阈值。

例如,下面的代码演示了如何使用阈值进行图像分割:```matlabimg = imread('image.jpg');grayImg = rgb2gray(img);threshold = graythresh(grayImg);binaryImg = im2bw(grayImg, threshold);```其次,基于边缘的分割方法是通过检测图像中的边缘信息来实现图像分割。

在Matlab中,我们可以使用一系列边缘检测算法,如Sobel算子、Canny算子等。

这些算法可以提取图像中的边缘信息,并将其转化为二值图像。

下面的代码演示了如何使用Canny算子进行图像分割:```matlabimg = imread('image.jpg');grayImg = rgb2gray(img);edgeImg = edge(grayImg, 'canny');```最后,基于区域的分割方法是将图像分为具有相似纹理、颜色或形状特征的区域。

在Matlab中,我们可以使用基于区域的分割算法,如分水岭算法、区域生长算法等。

这些算法可以通过对图像进行区域合并或区域分裂来实现图像分割。

matlab自适应分割

matlab自适应分割

matlab自适应分割
自适应分割是一种图像处理技术,用于将图像分割成具有相似特征的区域。

在MATLAB中,可以使用以下函数实现自适应分割:
1. "imsegkmeans"函数:该函数使用k-means聚类算法将图像分割成k个类别。

可以指定聚类的类别数,以及其他参数,如初始聚类中心。

2. "adaptthresh"函数:该函数使用自适应阈值法将图像分割为前景和背景。

可以指定块大小和阈值计算方法。

3. "activecontour"函数:该函数使用主动轮廓模型将图像分割为前景和背景。

可以指定初始轮廓和其他参数,如迭代次数和边界条件。

4. "watershed"函数:该函数使用分水岭算法将图像分割为不同的区域。

可以指定种子点和其他参数,如梯度计算方法和连接条件。

这些函数可以根据具体的需求选择使用,并根据需要调整参数以获得最佳的分割结果。

可以通过查阅MATLAB的文档和示例代码来了解更多关于这些函数的详细信息。

matlab实现自适应阈值的canny算法

matlab实现自适应阈值的canny算法

一、背景介绍随着数字图像处理技术的不断发展,图像边缘检测一直是计算机视觉和图像处理领域的关键问题之一。

Canny算法作为一种经典的边缘检测算法,在实际应用中具有较高的准确性和鲁棒性,因此被广泛应用于各种图像处理任务中。

Canny算法的核心思想是利用图像的梯度信息来检测图像中的边缘,同时通过非极大值抑制和双阈值检测来提取最终的边缘信息。

二、Canny算法原理1. 高斯模糊:为了减少图像中的噪声对边缘检测的影响,Canny算法首先对图像进行高斯模糊处理,通过平滑图像来减少噪声的影响。

2. 梯度计算:接下来,Canny算法利用Sobel算子计算图像的梯度幅值和方向,得到图像的梯度信息。

3. 非极大值抑制:Canny算法通过比较图像中每个像素点的梯度方向,来抑制非边缘像素,从而得到更细化的边缘信息。

4. 双阈值检测:Canny算法利用双阈值检测来进一步筛选边缘像素,从而得到最终的边缘信息。

三、Matlab实现Canny算法1. 读取图像:使用Matlab的imread函数读取待处理的图像,并将其转换为灰度图像。

2. 高斯模糊:利用Matlab中的imgaussfilt函数对灰度图像进行高斯模糊处理,减少图像中的噪声。

3. 计算梯度:使用Matlab中的imgradient函数计算图像的梯度幅值和方向。

4. 非极大值抑制:编写代码实现对图像的非极大值抑制处理,保留图像中的边缘像素。

5. 双阈值检测:通过设定合适的高低阈值,使用Matlab中的imbinarize函数对图像进行双阈值检测,得到最终的边缘信息。

6. 显示结果:使用Matlab中的imshow函数将原始图像和处理后的边缘图像进行显示,观察算法的效果。

四、自适应阈值优化1. 传统Canny算法中,阈值的设定是一个固定的数值,对于不同图像可能会产生较大的误差。

2. 为了进一步提高Canny算法的准确性和鲁棒性,在阈值的设定上可以引入自适应阈值技术。

matlab 自适应阈值函数

matlab 自适应阈值函数

matlab 自适应阈值函数全文共四篇示例,供读者参考第一篇示例:MATLAB是一种非常流行的科学计算软件,广泛应用于工程、物理、生物、金融等领域。

自适应阈值函数是图像处理领域一项重要的功能,可以帮助我们在处理图像时更加精确地提取我们需要的信息。

在本文中,我们将深入探讨MATLAB中的自适应阈值函数,以及如何在实际应用中灵活使用它来处理各类图像。

自适应阈值函数在图像处理中的作用是什么?我们需要了解图像处理中阈值的概念。

阈值处理是指将图像中的像素值与一个特定的数值进行比较,从而实现对图像的二值化处理。

而自适应阈值处理则是根据图像的局部特性动态地调整阈值,从而使得图像的二值化效果更加精确和准确。

MATLAB中自适应阈值函数通常是通过调用imbinarize函数实现的。

该函数的调用格式为imbinarize(I,method,param1,param2,...),其中I为输入的图像,method表示所使用的自适应阈值方法,而param1、param2等为各种方法的参数。

常见的自适应阈值方法包括Sauvola、Niblack、Otsu等。

以Sauvola算法为例,该算法在处理图像时结合了图像的均值和标准差,以自适应地调整阈值。

调用imbinarize函数时,需要将method参数设置为'Sauvola',并可以通过传入其他参数来调整算法的参数。

这样,我们就可以得到一张使用Sauvola算法进行自适应阈值处理的图像。

在实际应用中,如何灵活使用MATLAB的自适应阈值函数呢?我们需要根据具体的图像特点选择合适的自适应阈值算法。

对于光照不均匀的图像可以选择Sauvola算法,而对于二值化效果要求较高的图像可以选择Otsu算法。

我们还可以通过调整算法的参数来进一步优化二值化效果。

在实际应用中,我们还可以将自适应阈值函数与其他图像处理函数结合使用,以满足特定的处理需求。

第二篇示例:MATLAB是一款非常流行的科学计算软件,广泛应用于工程、科学、医学领域等各个领域。

图像分割Matlab代码

图像分割Matlab代码

图像分割Matlab代码图像分割Matlab代码 (一)图像边缘检测不同方法比较将Roberts、Sobel、Prewitt、LOG、Canny算子等经典图像分割算法对灰度图像分割的结果进行比较。

Matlab 代码如下:%% 图像边缘检测不同方法比较% Roberts、Sobel、Prewitt、LOG、Canny算子对灰度图像分割的结果比较clc;clear all;close all;f=imread('8_256_lena.bmp','bmp'); subplot(2,3,1);subimage(f);title('原始图像');[g, t]=edge(f,'roberts',[],'both'); subplot(2,3,2);subimage(g);title('Roberts算子对图像分割的结果');[g, t]=edge(f,'sobel',[],'both'); subplot(2,3,3);subimage(g);title('Sobel算子对图像分割的结果');[g, t]=edge(f,'prewitt',[],'both'); subplot(2,3,4);subimage(g);title('Prewitt算子对图像分割的结果');[g, t]=edge(f,'log'); subplot(2,3,5);subimage(g);title('LOG算子对图像分割的结果'); [g, t]=edge(f,'canny'); subplot(2,3,6);subimage(g);title('Canny算子对图像分割的结果');(二)区域生长法分割图像区域生长法分割图像,matlab代码如下: %% 区域生长法分割图像clc;clear all;close all;f=imread('rice_1.bmp','bmp'); % f=imread('rice.png','png'); %f=imread('8_256_lena.bmp','bmp'); subplot(1,2,1);subimage(f);%选择三个种子点seedx=[63, 10, 85];%rice图的生长点seedy=[30, 56, 60];% seedx=[100, 150, 227];%lena图的生长点% seedy=[56, 130, 189];hold onplot(seedx,seedy,'gs','linewidth',1); title('原始图像及种子点位置');f=double(f);markerim=f==f(seedy(1),seedx(1)); for i=2:length(seedx)markerim=markerim|(f==f(seedy(i),seedx(i)));end%3个种子点区域的阈值thresh=[12,6,12];maskim= zeros(size(f));for i=1:length(seedx)g=abs(f-f(seedy(i),seedx(i)))<=thresh(i);maskim=maskim|g;end[g,nr]=bwlabel(imreconstruct(markerim,maskim),8); % g=mat2gray(g);%以灰度级显示,注释掉此行以二值图像显示subplot(1,2,2);subimage(g);title('三个种子点区域生长分割结果');(三)迭代阈值选择法二值化图像与Otsu阈值选择法二值化图像比较迭代阈值选择法二值化图像与Otsu阈值选择法二值化图像比较的matlab代码如下:%% 迭代阈值选择法二值化图像与Otsu阈值选择法二值化图像比较 clc;clear all;close all;f=imread('8_256_lena.bmp','bmp'); subplot(2,2,1);subimage(f);title('原始图像');f=double(f);T=(min(f(:))+max(f(:)))/2; done=false;i=0;while ~doner1=find(f<=T);r2=find(f>T);Tnew=(mean(f(r1))+mean(f(r2)))/2;done=abs(Tnew-T)<1;T=Tnew;i=i+1;endf(r1)=0;f(r2)=1;subplot(2,2,2);subimage(f);title('迭代阈值二值化图像图像');f=imread('8_256_lena.bmp','bmp');subplot(2,2,3);subimage(f);title('原始图像');T=graythresh(f);g=im2bw(f,T);subplot(2,2,4);subimage(g);title('Otsu方法二值化图像');。

利用Matlab进行图像分割的常用方法与应用案例

利用Matlab进行图像分割的常用方法与应用案例

利用Matlab进行图像分割的常用方法与应用案例引言:图像分割是图像处理领域的一项重要技术,它将图像分割成具有相似特征的区域或像素。

图像分割在许多应用中起着关键作用,如医学图像分析、计算机视觉和机器人视觉等领域。

本文将介绍Matlab中常用的图像分割方法和应用案例。

一、基于阈值的图像分割方法基于阈值的图像分割方法是最简单和最常用的一种方法。

它根据像素的灰度值与预先设定的阈值进行比较,将图像分为前景和背景两个部分。

Matlab中提供了丰富的函数和工具箱来实现基于阈值的图像分割。

例如,可以使用im2bw函数将灰度图像转换为二值图像,代码如下:```matlabimage = imread('image.jpg');gray_image = rgb2gray(image);threshold = graythresh(gray_image);bw_image = im2bw(gray_image, threshold);imshow(bw_image);```二、基于边缘检测的图像分割方法边缘检测是图像分割中常用的一种方法,它基于图像中不同区域之间的边界。

常用的边缘检测算法有Sobel、Prewitt和Canny等。

在Matlab中,可以使用edge函数实现边缘检测,代码如下:```matlabimage = imread('image.jpg');gray_image = rgb2gray(image);edge_image = edge(gray_image, 'sobel');imshow(edge_image);```三、基于聚类分析的图像分割方法聚类分析是图像分割中一种常见的方法,它将图像中的像素分成不同的群集,每个群集代表一个区域或对象。

常用的聚类算法有K-means和Mean-shift等。

在Matlab中,可以使用kmeans函数实现K-means聚类,代码如下:```matlabimage = imread('image.jpg');feature_vector = reshape(image, [], 3);[cluster_index, cluster_center] = kmeans(double(feature_vector), 2);segmented_image = reshape(cluster_index, size(image, 1), size(image, 2));imshow(segmented_image);```四、图像分割的应用案例1. 医学图像分割医学图像分割在临床诊断和研究中具有重要意义。

如何进行图像分割的Matlab实现

如何进行图像分割的Matlab实现

如何进行图像分割的Matlab实现引言:图像分割是计算机视觉领域的一项基础技术,它将图像中的像素点分为不同的区域,使得具有相似特征的像素被聚类到一起。

在图像分析、目标检测、图像处理等任务中,图像分割起着至关重要的作用。

本文将介绍如何使用Matlab实现图像分割算法,包括传统的阈值分割、基于区域的分割以及基于深度学习的分割等。

一、传统的阈值分割1.1 简介阈值分割是最简单和常用的图像分割方法之一,它根据像素的灰度值与阈值的比较结果将像素分为两类:前景和背景。

在Matlab中,可以使用函数`im2bw`实现二值化分割任务。

1.2 实现步骤(1)加载图像:使用`imread`函数读取待分割的图像,并将其转换为灰度图像。

(2)确定阈值:根据图像的灰度直方图,可以通过分析波峰和波谷来确定一个适合的阈值。

(3)二值化分割:使用`im2bw`函数将灰度图像二值化,得到分割后的图像。

(4)结果显示:使用`imshow`函数将原图像和分割结果进行显示。

二、基于区域的分割2.1 简介基于区域的分割方法将图像划分为具有一定连续性和相似性质的区域,其基本思想是将图像中相似的像素组成区域,并对区域进行合并或分裂,以达到分割的目的。

2.2 实现步骤(1)加载图像:同样使用`imread`函数读取待分割的图像。

(2)图像预处理:可选的预处理步骤包括噪声去除、图像增强等,以提供更好的分割效果。

(3)区域生长:选择一个适当的种子点作为起始点,在附近的像素中根据一定的准则来判断是否属于同一区域,并逐步生长扩展区域,直至满足停止准则。

(4)结果显示:使用`imshow`函数将原图像和分割结果进行显示。

三、基于深度学习的分割3.1 简介基于深度学习的分割方法是近年来发展起来的一种高效且准确的分割技术,主要基于深度卷积神经网络(CNN)和全卷积网络(FCN)。

深度学习模型通过学习大量标注的图像,能够学习到图像的高级特征,从而实现更准确的图像分割。

matlab 自适应阈值函数

matlab 自适应阈值函数

matlab 自适应阈值函数
Matlab中的自适应阈值函数通常用于图像处理,用于将图像分
割成目标和背景。

一种常用的自适应阈值函数是`imbinarize`函数,它可以根据局部像素的灰度值动态地确定阈值,从而实现自适应阈
值分割。

`imbinarize`函数可接受多种参数,其中最常用的是输入图像
和阈值。

例如,可以使用以下语法调用该函数:
bw = imbinarize(I, 'adaptive', 'Sensitivity', 0.5);
在这个例子中,`I`是输入图像,`'adaptive'`表示使用自适应
阈值方法,`'Sensitivity'`参数用于调整阈值的敏感度,`0.5`是
敏感度的值。

函数将返回一个二值图像`bw`,其中包含根据自适应
阈值分割后的目标和背景。

除了`imbinarize`函数外,Matlab还提供了其他一些用于自适
应阈值分割的函数,例如`adapthisteq`和`localthresh`等。

这些
函数可以根据具体的需求和图像特性选择合适的自适应阈值方法。

需要注意的是,自适应阈值函数的性能受到图像质量、噪声、光照条件等因素的影响,因此在使用时需要仔细调整参数以获得最佳的分割效果。

同时,还可以结合其他图像处理技术,如滤波、边缘检测等,以进一步提高分割的准确性和稳定性。

总之,Matlab中的自适应阈值函数是图像处理中常用的工具,能够有效地实现图像的自适应阈值分割,提取出目标和背景,为后续的图像分析和处理提供了重要的基础。

Matlab 图像处理基本全局阈值处理

Matlab 图像处理基本全局阈值处理
Tnext=0.5*(mean(I(g))+mean(I(~g)));%新阈值两个范围内像素平均值和的一半
done=abs(T-Tnext)<0.5; %0.5是自己指定的参数
T=Tnext;
end
%以下程序就是根据上面确定的阈值进行图像二值分割
J=I;
K=find(J>=T);
J(K)=255;
% I=double(I);
%T 建议初始化为图像中最大强度值和最小亮度值的平均值
% T=0.5*(double(min(I(:)))+double(max(I(:))));
% T=mean(I(:));
T=0;%阈值初始化值
T0=0.5; %预定偏差大小
done=false;num=0;%迭代次数
I=imread('cameraman.tif');%读入原始图像
T=0.5*(double(min(I(:)))+double(max(I(:))));%设置初始阈值为最大灰度和最小灰度值和的一半
done=false;
while ~done
g=I>=T;%分成两组像素,灰度值大于或者等于T的和灰度值小于T的
g=f>T;
Tnext=0.5*(mean(f(g))+mean(f(~g)));
done=abs(T-Tnext)<0.5;
T=Tnext;
end
g=im2bw(f,T/255);
subplot(121);
while ~done
g=I>=T;
%由于g或者~g有可能为空,因此必须分情况处理

图像分割的阈值算法matlab实现

图像分割的阈值算法matlab实现

图像分割的阈值算法matlab实现【OTSU,1DEntropy,2DEntropy】今天看了几篇论文,实现了一下,没有验证各算法的有效性也没有进行定量比较OTSU% OTSU method% 2006/9/4clc;clear;%I = imread('E:\test\chinalake.bmp','bmp');I = imread('E:\test\lena.png','png');I = double(I);I = Medianfilter(I); % median filterh_Tmean = mean(mean(I));[height,width] = size(I);Size = height * width; % the size of the imageh_T = sum(sum(I)); % the total gray value of the imageG_min = min(min(I)); % the min gray value of the imageG_max = max(max(I)); % the max gray value of the iamge I_seg = zeros(height,width); % the array to store the segmented image thresh = 0; % the thresholdnum1 = 0;num2 = 0; % count the num of the pixel from the diffrient classP1 = 0;P2 = 0; % the probability of the different classh_T1 = 0;h_T2 = 0; % the total gray value of different classh_T1mean = 0;h_T2mean = 0; % the mean value of the classmax = 0;for thresh=G_min:G_max % find the best thresholdh_T1 = 0;h_T2 = 0;num1 = 0;for h=1:heightfor w=1:widthif I(h,w) <= threshnum1 = num1 + 1;h_T1 = h_T1 + I(h,w);endendendnum2 = Size - num1;h_T2 = h_T - h_T1;P1 = num1/Size;P2 = num2/Size;h_T1mean = h_T1/num1;h_T2mean = h_T2/num2;%D = P1*(h_T1mean - h_Tmean)^2 + P2*(h_T2mean - h_Tmean)^2;D1 = P1*P2*(h_T1mean - h_T2mean)^2; % the tow equation is equal if D1 > maxmax = D1;T_best = thresh; % T record the best threshendend%%%%%%% Seg the image %%%%%%%%%for i=1:heightfor j=1:widthif I(i,j) > T_bestI_seg(i,j) = 255;endendendT_bestfigure;imshow(uint8(I_seg));figure;imhist(uint8(I));***************************************************一维直方图熵阈值算法% 1D entropy thresholding method% Pun提出,Kapur对其阈值和熵进行改进% 两类:object 和background% P1 = sum(pi) i:1~T% P2 = sum(pi) i:T+1~255% HO = ln(P1) + H1/P1;% HB = ln(P2) + H2/P2;% H1 = -sum(pi*ln(pi)); i:1~T% H2 = -sum(pi*ln(pi)); i:T+1~255% H = HO + HB;% T_best = argmax(H);clc;clear;%I = imread('E:\test\chinalake.bmp','bmp');I = imread('E:\test\lena.png','png');I = double(I);I = Medianfilter(I); % median filter[height,width] = size(I);Size = height * width; % the size of the imageh_T = sum(sum(I)); % the total gray value of the imageG_min = min(min(I)); % the min gray value of the imageG_max = max(max(I)); % the max gray value of the iamgeI_seg = zeros(height,width); % the array to store the segmented image I_hist = zeros(1,256); % the array to store the hist of the imagethresh = 0; % the thresholdnum1 = 0;num2 = 0; % count the num of the pixel from the diffrient classP1 = 0;P2 = 0; % the probability of the different classh_T1 = 0;h_T2 = 0; % the total gray value of different classmax = 0;H1 = 0;H2 = 0; % the middle varH_object = 0;H_background = 0;H_total = 0; % the total entropyT_best = 0; % the best thresh%%%%% 计算直方图 %%%%%%for i=1:height % calculate the hist of the image for j=1:widthI_hist(I(i,j)+1) = I_hist(I(i,j)+1) + 1;endendfor thresh=G_min:G_max % find the best threshold H1 = 0;h_T1 = 0;H2 = 0;for h=1:heightfor w=1:widthif I(h,w) <= threshnum1 = num1 + 1;h_T1 = h_T1 + I(h,w);endendendnum2 = Size - num1;h_T2 = h_T - h_T1;P1 = num1/Size;P2 = num2/Size;for i=1:threshpx = I_hist(i+1)/Size;H1 = H1 + (-px*ln(px));endfor i=thresh+1:G_maxpx = I_hist(i+1)/Size;H2 = H2 + (-px*ln(px));endH_object = ln(P1) + H1/P1;H_background = ln(P2) + H2/P2;H_total = H_object + H_background;if H_total > maxmax = H_total;T_best = thresh;endend%%%%%%% Seg the image %%%%%%%%%for i=1:heightfor j=1:widthif I(i,j) > T_bestI_seg(i,j) = 255;endendendT_bestfigure;imshow(uint8(I_seg));figure;imhist(uint8(I));********************************************************** 2维直方图熵阈值算法% 二维直方图熵阈值法% 参考基于2D 熵阈值的铁谱磨粒图像分割方法,傅建平%廖振强,张培林,汪传忠,(南京理工大学机械学院,南京),%(军械工程学院,石家庄)% pixel gray% ^% |% | ==> 2D histgram% |% |% |__________________________> local grayclc;clear;%I = imread('E:\test\chinalake.bmp','bmp');I = imread('E:\test\lena.png','png');I = double(I);[height,width] = size(I);Size = height * width; % the size of the imageG_min = min(min(I)); % the min gray value of the imageG_max = max(max(I)); % the max gray value of the iamgeI_2Dhist = zeros(G_max+1,G_max+1); % the array to store the 2D hist of the imageI_mean = zeros(height,width); % the mean value of the local imageI_seg = zeros(height,width);WS = 3; % mean filter's window size 3*3nr = floor(WS/2);I_big = zeros(height+2*nr,width+2*nr); % the bigger array used to mean filterI_big(nr+1:height+nr,nr+1:width+nr) = I; % copy data from the original image%%%%%%%%%% mean filter %%%%%%%%%%%%%%%%% 获取局部区域灰度信息%%%%%for i=1:heightfor j=1:widthsum = 0;num = 0;for h=-nr:nrfor w=-nr:nrsum = sum + I_big(i+h,j+w);num = num + 1;endendI_mean(i,j) = sum/num;endend%%%% 构建2D直方图,横轴上以点象素灰度表示,纵轴上以局部区域灰度表示%%%%for i=1:heightfor j=1:widthh = I(i,j)+1; % 横轴信息,避免0,所以加1,象素灰度w = I_mean(i,j)+1; % 纵轴信息,避免0,所以加1,局部区域灰度I_2Dhist(h,w) = I_2Dhist(h,w) + 1; % 统计灰度对<pixel,local>的出现次数,构建2D直方图 endend% find the best thresh : hor_thresh,and ver_thresh %for ver_thresh=0:G_maxfor hor_thresh=0:G_maxsum1 = 0;sum2 = 0;H1 = 0;H2 = 0;for i=0:ver_threshfor j=0:hor_threshsum1 = sum1 + I_2Dhist(i+1,j+1);endendfor i=0:ver_threshfor j=0:hor_threshP1 = I_2Dhist(i+1,j+1)/sum1;H1 = H1 + P1*log(P1);endendif i < G_max & j < G_maxfor i=ver_thresh+1:G_maxfor j=hor_thresh+1:G_maxsum2 = sum2 + I_2Dhist(i+1,j+1);endendfor i=ver_thresh+1:G_maxfor j=hor_thresh+1:G_maxP2 = I_2Dhist(i+1,j+1)/sum2;H2 = H2 +P2*log(P2);endendendH_total = H1 + H2;if H_total > maxmax = H_total;ver_Tbest = ver_thresh;hor_Tbest = hor_thresh;endendend%%%%%% 分割%%%%%%%%for i=1:heightfor j=1:widthif I(i,j) < ver_Tbest & I_mean(i,j) < hor_TbestI_seg(i,j) = 0;elseif I(i,j) >= ver_Tbest & I_mean(i,j) >= hor_Tbest I_seg(i,j) = 255;endendendT_bestfigure;imshow(uint8(I_seg)); figure;imhist(uint8(I));。

利用Matlab进行图像分割与边缘检测的实践方法

利用Matlab进行图像分割与边缘检测的实践方法

利用Matlab进行图像分割与边缘检测的实践方法图像分割和边缘检测是计算机视觉领域中非常重要的任务,它们在图像处理和分析中有着广泛的应用。

Matlab作为一种强大的科学计算工具,提供了丰富的图像处理函数和工具箱,可以帮助我们进行图像分割和边缘检测的实践。

本文将介绍利用Matlab进行图像分割和边缘检测的一些实践方法。

一、图像分割方法1. 阈值分割阈值分割是最常用的图像分割方法之一,它通过选取适当的阈值将图像中的不同区域分割开来。

在Matlab中,可以使用graythresh函数来自动选择合适的阈值。

例如,对于灰度图像I,可以使用以下代码进行阈值分割:```level = graythresh(I);BW = im2bw(I, level);```这里level是选取的阈值,BW是二值化后的图像。

2. 区域生长区域生长算法是一种基于像素相似性的图像分割方法,它从种子点出发,通过合并与种子点相似的像素,逐渐扩展出一个区域。

Matlab中提供了regiongrowing 函数,可以用于实现区域生长算法。

例如,对于灰度图像I,可以使用以下代码进行区域生长分割:```seed = [x, y]; % 种子点位置BW = regiongrowing(I, seed);```这里seed是种子点的位置,BW是分割得到的区域。

3. 水平线分割水平线分割是一种特殊的图像分割方法,适用于包含水平线结构的图像。

在Matlab中,可以使用hough函数进行直线检测,然后根据检测结果进行分割。

例如,对于二值化的图像BW,可以使用以下代码进行水平线分割:```[H, T, R] = hough(BW);P = houghpeaks(H, 10);lines = houghlines(BW, T, R, P);BW_separate = false(size(BW));for k = 1 : length(lines)xy = [lines(k).point1; lines(k).point2];xy(:, 2) = max(min(xy(:, 2), size(BW, 1)), 1); % 限制线段在图像范围内indices = sub2ind(size(BW), xy(:, 2), xy(:, 1));BW_separate(indices) = true;end```这里H是Hough变换的结果,T和R是Hough变换的参数,P是峰值点的位置,lines是检测到的直线数据结构,BW_separate是分割得到的区域。

基于matlab的数字图像处理之图像阈值分割算法研究

基于matlab的数字图像处理之图像阈值分割算法研究

基于Matlab数字图像处理之图像阈值分割算法研究3.1.1迭代法实践代码:clc;clear all;f=imread C cat. bmp');f=rgb2gray(f);f=im2double(f);T=0. 5*(min(f(:))+max(f (:)));done=false;while 〜doneg= f > 二T;Tn=0. 5* (mean (f (g) )+mean (f Cg)));done=abs(T-Tn)<0. 1;T=Tn;endTr=im2bw(f, T);subplot (121), imshow(f), title('原图');subplot (122), imshow(r), title ('阈值分割算法研究一迭代法');3.1.2迭代法实践截图:原图阈值分割算法研究-迭代法3. 2.1均匀性度量法实践代码:clc;clear all;I=imread (' cat. bmp');I=rgb2gray (I);I=double (I);[m, n]=size(I);Smin=-1;for T=0:255suml=0; num1=0;sum2=0; num2=0;for i=l:mfor j=l:nif I(i, j)>=Tsum2=sum2+I (i,j);num2=num2+l;elsesuml=suml+I (i, j);numl=numl+l;endendendavel=suml/numl;ave2=sum2/num2;dl=-l;d2=-l;for i=l:mfor j=l:nif I(i, j)>=Td=(I (i, j)-ave2) "2;if d2=-ld2 二d;elsed2=d2+d;endelse qq3293559920d=(I(i, j)-avel) ^2;if dl==-ldl=d;elsedl=dl+d;endendendendpl=numl/(m*n);p2=num2/(m*n);S=pl*dl+p2*d2;if(Smin==-1)Smin=S;elseif(S<Smin)Smin=S;Th=T;endendendThsubplot (121), imshow(uint8(D), title('原图');for i=l:mfor j=l:nif I(i, j)>=ThI(i, j) =255;elseI(i, j)=0;endendendsubplot (122), imshow(I), title('阈值分割算法研究一均匀性度量法');3. 2.2均匀性度量法实践截图:原图阈值分割算法研究-均匀性度量法3. 3.1类间最大距离法实践代码:clc;clear all;I=imread C cat. bmp');I=rgb2gray(I);I二double ⑴;[m, n]=size(l);Smax=0;for T=0:255suml=0; num1=0;sum2=0; num2=0;for i=l:mfor j=l:nif I(i, j)>=Tsum2=sum2+I (i,j);num2=num2+l;elsesuml=suml+I (i,j);numl=numl+l;end qql706431899endendavel=suml/numl;ave2=sum2/num2;S=((ave2-T)*(T-ave1))/(ave2-ave1) 2;if(S>Smax)Smax=S;Th 二T;endendThsubplot (121), imshow(uint8(I)), title('原图');for i=l:mfor j=l:nif I(i, j)>=ThI(i, j)=255;elseI(i, j)=0;endendendsubplot (122), imshow(I), title('阈值分割算法研究一类间最大距离法');3. 3.2类间最大距离法实践截图:3. 4.1最大类内类间方差比法实践代码: clc;clear all;I=imread(,cat. bmp");I=rgb2gray(T);I二double (I);[m, n]=size(I);Smax=-1;for T=0:255suml=0; numl=0;sum2=0; num2=0;for i=l:mfor j=l:nif I(i,j)>=Tsum2=sum2+I (i,j);num2=num2+l;elsesuml=suml+I (i,j);nunil=numl + l;endendendavel=suml/numl;ave2=sum2/num2;ave=(suml+sum2)/(m*n);dl=-l;d2=-l;for i=l:mfor j=l:nif I(i,j)>=Td=(I (i, j)-ave2) ^2;if d2==-ld2=d;elsed2=d2+d;endelsed=(I (i, j)-avel) *2;if dl==-ldl=d;elsedl=dl+d;endendendendpl=numl/(m*n);p2=num2/(m*n);Sl=pl*(avel-ave)*2+p2*(ave2-ave) 2\S2=pl*dl+p2*d2;S=S1/S2;if S>SmaxSmax=S;Th =T;endendThsubplot (121), imshow(uint8(I)), title。

用matlab实现自适应图像阈值分割最大类方差法代码

用matlab实现自适应图像阈值分割最大类方差法代码

%用matlab实现自适应图像阈值分割最大类方差法代码clear;warningoff;SE = strel('diamond',4);BW1 = imread('cameraman.tif');BW2 = imerode(BW1,SE);BW3 = imdilate(BW2,SE);BW4 = BW1-BW3;%rgb转灰度ifisrgb(BW4)==1I_gray=rgb2gray(BW4);elseI_gray=BW4;endfigure,imshow(I_gray);I_double=double(I_gray);%转化为双精度[wid,len]=size(I_gray);colorlevel=256;%灰度级hist=zeros(colorlevel,1);%直方图%threshold=128; %初始阈值%计算直方图fori=1:widforj=1:lenm=I_gray(i,j)+1;hist(m)=hist(m)+1;endendhist=hist/(wid*len);%直方图归一化miuT=0;form=1:colorlevelmiuT=miuT+(m-1)*hist(m);endxigmaB2=0;formindex=1:colorlevel threshold=mindex-1;omega1=0;omega2=0;form=1:threshold-1omega1=omega1+hist(m);endomega2=1-omega1;miu1=0;miu2=0;form=1:colorlevelifm<thresholdmiu1=miu1+(m-1)*hist(m);elsemiu2=miu2+(m-1)*hist(m);endendmiu1=miu1/omega1;miu2=miu2/omega2;xigmaB21=omega1*(miu1-miuT)^2+omega2*(miu2-miuT)^2; xigma(mindex)=xigmaB21;ifxigmaB21>xigmaB2finalT=threshold;xigmaB2=xigmaB21;endendfT=finalT/255%阈值归一化T=graythresh(I_gray)%matlab函数求阈值fori=1:widforJ=1:lenifI_double(i,j)>finalTbn(i,j)=1;elsebin(i,j)=0;endendendfigure,imshow(bin);figure,plot(1:colorlevel,xigma); clear;warning off;SE = strel('diamond',4);BW1 = imread('img1.bmp'); BW2 = imerode(BW1,SE);BW3 = imdilate(BW2,SE);BW4 = BW1-BW3;%rgb转灰度if isrgb(BW4)==1I_gray=rgb2gray(BW4);elseI_gray=BW4;endfigure,imshow(I_gray);I_double=double(I_gray);%转化为双精度[wid,len]=size(I_gray);colorlevel=256; %灰度级hist=zeros(colorlevel,1);%直方图%threshold=128; %初始阈值%计算直方图for i=1:widfor j=1:lenm=I_gray(i,j)+1;hist(m)=hist(m)+1;endendhist=hist/(wid*len);%直方图归一化miuT=0;for m=1:colorlevelmiuT=miuT+(m-1)*hist(m);endxigmaB2=0;for mindex=1:colorlevelthreshold=mindex-1;omega1=0;omega2=0;for m=1:threshold-1omega1=omega1+hist(m);endomega2=1-omega1;miu1=0;miu2=0;for m=1:colorlevelif m<thresholdmiu1=miu1+(m-1)*hist(m);elsemiu2=miu2+(m-1)*hist(m);endendmiu1=miu1/omega1;miu2=miu2/omega2;xigmaB21=omega1*(miu1-miuT)^2+omega2*(miu2-miuT)^2; xigma(mindex)=xigmaB21;if xigmaB21>xigmaB2finalT=threshold;xigmaB2=xigmaB21;endendfT=finalT/255%阈值归一化T=graythresh(I_gray)%matlab函数求阈值for i=1:widfor J=1:lenif I_double(i,j)>finalTbn(i,j)=1;elsebin(i,j)=0;endendendfigure,imshow(bin);figure,plot(1:colorlevel,xigma);。

基于matlab的数字图像处理之图像阈值分割算法研究

基于matlab的数字图像处理之图像阈值分割算法研究
sum1=0; num1=0;
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力通根保1据过护生管高产线中工敷资艺设料高技试中术卷资0配不料置仅试技可卷术以要是解求指决,机吊对组顶电在层气进配设行置备继不进电规行保范空护高载高中与中资带资料负料1荷试试下卷卷高问总中题体资2配2料,置试而时卷且,调可需控保要试障在验各最;类大对管限设路度备习内进题来行到确调位保整。机使在组其管高在路中正敷资常设料工过试况程卷下中安与,全过要,度加并工强且作看尽下护可都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并术3试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%用matlab实现自适应图像阈值分割最大类方差法代码clear;
warning off;
SE = strel('diamond',4);
BW1 = imread('cameraman.tif');
BW2 = imerode(BW1,SE);
BW3 = imdilate(BW2,SE);
BW4 = BW1-BW3;
%rgb转灰度
if isrgb(BW4)==1
I_gray=rgb2gray(BW4);
else
I_gray=BW4;
end
figure,imshow(I_gray);
I_double=double(I_gray);%转化为双精度
[wid,len]=size(I_gray);
colorlevel=256; %灰度级
hist=zeros(colorlevel,1);%直方图
%threshold=128; %初始阈值
%计算直方图
for i=1:wid
for j=1:len
m=I_gray(i,j)+1;
hist(m)=hist(m)+1;
end
end
hist=hist/(wid*len);%直方图归一化
miuT=0;
for m=1:colorlevel
miuT=miuT+(m-1)*hist(m);
end
xigmaB2=0;
for mindex=1:colorlevel
threshold=mindex-1;
omega1=0;
omega2=0;
for m=1:threshold-1
omega1=omega1+hist(m);
end
omega2=1-omega1;
miu1=0;
miu2=0;
for m=1:colorlevel
if m<threshold
miu1=miu1+(m-1)*hist(m);
else
miu2=miu2+(m-1)*hist(m);
end
end
miu1=miu1/omega1;
miu2=miu2/omega2;
xigmaB21=omega1*(miu1-miuT)^2+omega2*(miu2-miuT)^2;
xigma(mindex)=xigmaB21;
if xigmaB21>xigmaB2
finalT=threshold;
xigmaB2=xigmaB21;
end
end
fT=finalT/255%阈值归一化
T=graythresh(I_gray)%matlab函数求阈值
for i=1:wid
for J=1:len
if I_double(i,j)>finalT
bn(i,j)=1;
else
bin(i,j)=0;
end
end
end
figure,imshow(bin);
figure,plot(1:colorlevel,xigma);
clear;
warning off;
SE = strel('diamond',4);
BW1 = imread('img1.bmp');
BW2 = imerode(BW1,SE);
BW3 = imdilate(BW2,SE);
BW4 = BW1-BW3;
%rgb转灰度
if isrgb(BW4)==1
I_gray=rgb2gray(BW4);
else
I_gray=BW4;
end
figure,imshow(I_gray);
I_double=double(I_gray);%转化为双精度
[wid,len]=size(I_gray);
colorlevel=256; %灰度级
hist=zeros(colorlevel,1);%直方图
%threshold=128; %初始阈值
%计算直方图
for i=1:wid
for j=1:len
m=I_gray(i,j)+1;
hist(m)=hist(m)+1;
end
end
hist=hist/(wid*len);%直方图归一化
miuT=0;
for m=1:colorlevel
miuT=miuT+(m-1)*hist(m);
end
xigmaB2=0;
for mindex=1:colorlevel
threshold=mindex-1;
omega1=0;
omega2=0;
for m=1:threshold-1
omega1=omega1+hist(m);
end
omega2=1-omega1;
miu1=0;
miu2=0;
for m=1:colorlevel
if m<threshold
miu1=miu1+(m-1)*hist(m);
else
miu2=miu2+(m-1)*hist(m);
end
end
miu1=miu1/omega1;
miu2=miu2/omega2;
xigmaB21=omega1*(miu1-miuT)^2+omega2*(miu2-miuT)^2;
xigma(mindex)=xigmaB21;
if xigmaB21>xigmaB2
finalT=threshold;
xigmaB2=xigmaB21;
end
end
fT=finalT/255%阈值归一化
T=graythresh(I_gray)%matlab函数求阈值
for i=1:wid
for J=1:len
if I_double(i,j)>finalT
bn(i,j)=1;
else
bin(i,j)=0;
end
end
end
figure,imshow(bin);
figure,plot(1:colorlevel,xigma);。

相关文档
最新文档