数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)

这篇具有很好参考价值的文章主要介绍了数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目的

1 理解阈值分割的依据及确定阈值的方法;
2 掌握常用的边缘检测算子的使用方法,加深对不同算子优缺点的理解;
3 能够自行评价各主要算子在无噪声条件下和噪声条件下的分割性能;

二、实验原理

(一) 阈值分割

1. 直方图法

测试图像:coins.png
原理:观察该图像的直方图,手动选取谷底点作为阈值对该图像进行分割。

2.OTSU法(最大类间方差法)确定阈值

此方法为选择阈值使目标和背景的类间方差最大或者目标(背景)内部方差最小。
相关函数: T=graythresh(f); %计算图像f的全局灰度阈值

3. 迭代阈值法

(1)选择一个初始阈值T0;
(2)根据阈值T0将图像分割为G1和G2两部分。G1包含所有小于等于T0的像素,G2包含所有大于T0的像素。分别求出G1和G2的平均灰度值m1和m2。
(3)得到新的阈值T1=(m1+m2)/2
(4)重复步骤(2)和(3),直到最新阈值和上一个阈值的差小于某个精度。

4. 点检测

用实验法确定阈值对图像中的孤立点进行检测,并总结阈值大小对检测结果的影响。
点检测模板w:
-1 -1 -1
-1 8 -1
-1 -1 -1
检测方法:
g=abs(imfilter(double(f), w))>=T

(二)边缘检测

利用边缘检测算子对图像进行操作,原理类似于图像增强中的模板和图像间的运算关系。
一阶导数可用于检测图像中的一个点是否在边缘上;
二阶导数可以判断一个边缘像素是在边缘亮的一边还是暗的一边;
一阶导数使用梯度算子,二阶导数使用拉普拉斯算子
各梯度算子模板如下:
用迭代法对示例图片cell、circuit、lena这三幅图像计算阈值并分割图像,数字图像实验,edge,matlab,计算机视觉
各算子检测边缘的MATLAB程序语句如下:算子后面的参数可为默认,也可自行定义。
语法:[g,t]=edge(f, ‘method’, parameter)
说明:
g是一个逻辑数组,其值为:在f中检测到边缘的位置为1,其他位置为零;
method为边缘检测器方法,可选为: ‘sobel’, ‘prewit’, ‘roberts’, ‘log’(LoG), ‘zerocoss’, ‘canny’等;
parameter包含两部分:T为指定的阈值,第二部分为dir(检测边缘的首选方向: ‘horizontal’, ‘vertical’, ‘both’),或sigma(标准方差),或H(指定的滤波函数)。
例:
BW1=edge(I,‘roberts’,T, dir);
BW2=edge(I,‘prewitt’, T, dir);
BW3=edge(I,‘sobel’, T, dir);
BW4=edge(I,‘log’, T, dir);
BW5= edge(I,‘canny’, T, dir);
若不写次两个参数,则自动取默认值。

三、实验内容

(一)阈值分割

1. 直方图法

测试图像:coins.png
原理:观察该图像的直方图,手动选取谷底点作为阈值对该图像进行分割。

2. OTSU法

用OTSU法(最大类间方差法)确定阈值并对‘coins.png’或‘lena.jpg’进行分割。要求:分割用两种方法:(1)im2bw函数;(2)for循环。若用“coins.png”图像,则对该方法确定的阈值和上题中直方图确定的阈值进行比较,观察两值大小差别。

3.点检测

完成下面的练习,在实验报告中提交运行结果并回答问题。
练习:分别运行以下两段程序,并回答问题:
(1)
f=imread(‘saturn.png’);
w=[-1 -1 -1; -1 8 -1; -1 -1 -1];
g=abs(imfilter(double(f), w));
T=max(g(😃);
T=T*0.5;
g=g>=T;
imshow(f);
figure, imshow(g);
问题:此段程序图像g能否正常显示,为什么?如何解决?(根据错误提示)
不能正常显示,因为对于rgb图像没法使用二维模板处理出正确的结果,从而不能显示出正确结果,加上f=rgb2gray(f);

(2)
f=imread(‘saturn.png’);
f1=rgb2gray(f);
f1=imresize(f1,[512 512]);
w=[-1 -1 -1;-1 8 -1;-1 -1 -1];
g=abs(imfilter(double(f1),w));
a=1;T=a*max(g(😃);
g=g>=T;
imshow(f1);
figure, imshow(g);
问题:
程序中的imresize函数的作用是什么?
对图像进行放缩到指定大小

对g=abs(imfilter(double(f1),w))中包含的三个函数的功能分别进行说明。
Double是为了将f1变成双精度浮点型(进行限定)、imfilter是通过w模板对图像进行卷积运算、abs是为了求取绝对值,因为有负数,给取正,便于进行比较

若要清晰显示原图像中的四个孤立点应对第二段程序中的哪部分进行调整。
a=1 的地方,对a进行下调

3. 迭代阈值法(选做)

要求:读懂程序,对3-13行给出注释
f=imread(‘rice.png’);
imshow(f);
count=0;
T=mean2(f);
done=false;
while ~done
count=count+1;
g=f>T;
T1=0.5*(mean(f(g))+mean(f(~g)));
done=abs(T-T1)<0.05;
T=T1;
end
f1=im2bw(f,T/255);
imshow(f);
figure,imshow(f1);

(二)边缘算子分割

1. 算子分割

(1)利用imfilter函数及Sobel模板(见实验原理部分)分别进行水平、垂直以及综合两方向的边缘检测。

步骤:
a. 读取‘cameraman.tif’图片并用im2double函数进行数据类型转换;
b. 分别生成水平和垂直两个方向的检测模板矩阵;
c. 用imfilter函数对图像分别进行两个方向的算子处理结果GX和GY;
d. 利用abs函数分别取两个方向各自的边缘图像的模值|GX|和|GY|;
e. 分别显示水平边缘、垂直边缘以及两个方向总边缘(|GX|+|GY|);
问题:观察运行后各模值的取值特点,总结本段程序的功能是什么?处理后的图像类型(是灰度图像还是二值图像)
特点是各个像素值是双精度形式,功能是图像锐化,增加边缘的锐利程度,灰度图像

(2)利用edge函数和Sobel算子分别检测水平、垂直及两个方向总边缘并进行显示。

问题:本段程序处理后的图像类型是灰度图像还是二值图像?通过(1)和(2)两段程序运行结果分析,说明两段程序功能上的区别。
二值图像。用算子进行计算时,运算出来的结果是灰度图像不是二值图,这是因为我们在进行算子处理时,是将其边缘锐化,使得边缘显示锐利,是图像增强。而利用edge算法时,处理出来的矩阵是二值图像而不是灰度图,这就是边缘检测,属于图像分割。

2. edge函数分割

用edge函数分别实现sobel算子、Prewitt算子、roberts算子、log算子、零交叉及canny算子的边缘提取,比较几种算子的分割效果,给出结论。
sobel算子、Prewitt算子、roberts算子是一阶算子,而log算子、零交叉及canny算子是二阶算子,并且对于canny算子是有方向梯度,所以效果最好

这里是引用

要求:图像采用‘lean’图像或‘cameraman’图像,所有图像显示在同一窗口。

四、撰写实验报告

程序、运行效果图、评价及总结(实验内容中的问题必须回答)

五、实验代码

%% 1
I = imread('C:\Users\DELL\Desktop\lena.jpg');
level = graythresh(I);
BW = im2bw(I,level);
imshow(BW);
[M,N] = size(I);
F = zeros(512);
for i = 1:M
   for j = 1:N
      if im2double(I(i,j)) >= level
          F(i,j) = 1;
      elseif im2double(I(i,j)) < level
          F(i,j) = 0;
      end
   end
end
imshow(F);
subplot(131);imshow(I);title('原图像')
subplot(132);imshow(BW);title('im2bw图像')
subplot(133);imshow(F);title('For图像')

%%

f=imread('saturn.png');
f=rgb2gray(f);
w=[-1 -1 -1; -1 8 -1; -1 -1 -1];
g=abs(imfilter(double(f), w));
T=max(g(:));
T=T*0.5;
g=g>=T;
imshow(f); 
figure, imshow(g);

f=imread('saturn.png');
f1=rgb2gray(f);
f1=imresize(f1,[512 512]);
w=[-1 -1 -1;-1 8 -1;-1 -1 -1];
g=abs(imfilter(double(f1),w));
a=0.4;T=a*max(g(:));
g=g>=T;
imshow(f1); 
figure, imshow(g);

%% 
f=imread('rice.png');
imshow(f);
count=0;
T=mean2(f);
done=false;
while ~done
    count=count+1;
    g=f>T;
    T1=0.5*(mean(f(g))+mean(f(~g)));
    done=abs(T-T1)<0.05;
    T=T1;
end
f1=im2bw(f,T/255); %因为阈值范围在【0,1】之间,而mean2得出的阈值只会在[0,255]所以进行归一化
imshow(f);
figure,imshow(f1);

%% 1 (1)
I1 = imread('lena.jpg');
I = im2double(I1);
BW1 = [-1 -2 -1;0 0 0;1 2 1];
BW2 = [-1 0 1;-2 0 2;-1 0 1];
g1 = imfilter(I,BW1);
g2 = imfilter(I,BW2);
% g3 = imfilter(I,BW3);
a1 = abs(g1);
a2 = abs(g2);
a3 = a1+a2;
figure
subplot(221);imshow(I1);title('原图像');
subplot(222);imshow(a1);title('水平');
subplot(223);imshow(a2);title('垂直');
subplot(224);imshow(a3);title('总边缘');

%% 1 (2)
I1 = imread('cameraman.tif');
I = im2double(I1);
BW1 = edge(I,'sobel','horizontal'); %水平
BW2 = edge(I,'sobel','vertical'); %垂直
BW3 = edge(I,'sobel','both');   %两者
figure
subplot(221);imshow(I1);title('原图像');
subplot(222);imshow(BW1);title('水平');
subplot(223);imshow(BW2);title('垂直');
subplot(224);imshow(BW3);title('总边缘');

%% 2
I1 = imread('cameraman.tif');
I = im2double(I1);
BW1 = edge(I,'sobel');
BW2 = edge(I,'roberts');
BW3 = edge(I,'prewitt');
BW4 = edge(I,'log');
BW5 = edge(I,'zerocross');
BW6 = edge(I,'canny');
subplot(231);imshow(BW1);title('sobel');
subplot(232);imshow(BW2);title('roberts');
subplot(233);imshow(BW3);title('prewitt');
subplot(234);imshow(BW4);title('log');
subplot(235);imshow(BW5);title('zerocross');
subplot(236);imshow(BW6);title('canny');

六、实验

直方图用迭代法对示例图片cell、circuit、lena这三幅图像计算阈值并分割图像,数字图像实验,edge,matlab,计算机视觉
Otus
用迭代法对示例图片cell、circuit、lena这三幅图像计算阈值并分割图像,数字图像实验,edge,matlab,计算机视觉
点检测

用迭代法对示例图片cell、circuit、lena这三幅图像计算阈值并分割图像,数字图像实验,edge,matlab,计算机视觉
迭代阈值法
用迭代法对示例图片cell、circuit、lena这三幅图像计算阈值并分割图像,数字图像实验,edge,matlab,计算机视觉
Imfilter加算子
用迭代法对示例图片cell、circuit、lena这三幅图像计算阈值并分割图像,数字图像实验,edge,matlab,计算机视觉
Edge算子
用迭代法对示例图片cell、circuit、lena这三幅图像计算阈值并分割图像,数字图像实验,edge,matlab,计算机视觉
各种edge
用迭代法对示例图片cell、circuit、lena这三幅图像计算阈值并分割图像,数字图像实验,edge,matlab,计算机视觉文章来源地址https://www.toymoban.com/news/detail-755239.html

到了这里,关于数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数字图像处理】实验三 图像分割(MATLAB实现)

    目录 一、实验意义及目的 二、实验内容 三、Matlab 相关函数介绍 四、算法原理 五、参考代码及扩展代码流程图 (1)参考代码流程图 (2)扩展代码流程图 六、参考代码 七、实验要求 (1)尝试不同的阈值选择方法,实现灰度图像二值化 (2)变换参数实现形态学滤波,查看滤波

    2024年02月05日
    浏览(50)
  • 数字图像处理——实验五 基于图像分割的车牌定位识别

    (1)掌握车牌阈值分割; (2)掌握基于形态学计算的图像分割; (3)掌握图像的二值化; (4)掌握基于像素投影的字符分割; (5)掌握字符识别原理。 (1)计算机; (2)Python 3.x及PyCharm软件; (3)需进行车牌识别的图片。 注: opencv-python 使用的是3.x 版本 (1) 图像灰

    2024年02月08日
    浏览(69)
  • 图像处理之阈值分割[全局阈值、Otsu阈值和迭代式阈值分割]

    一、阈值分割基本定义 阈值分割技术是最经典和流行的图像分割方法之一,也是最简单的一种图像分割方法。此技术 关键在于寻找适当的灰度阈值,通常是根据图像的灰度直方图来选取。它是用一个或几个阈值将图像的灰度级分为几个部分,认为属于同一个部分的像素是同

    2024年02月03日
    浏览(36)
  • Matlab|图像处理04|图像分割-阈值分割方法

    一、人工阈值分割方法threshold_test1.m 1、分析修改阈值对分割结果的影响 分析:取直方图中第一个谷底的灰度值作为阈值,图像分割效果较好。当阈值改变时,分割后的图像有部分信息丢失,本图中当阈值减小时分割后的图像黑色部分较多,当阈值增大时分割后的图像白色部

    2024年02月11日
    浏览(52)
  • Matlab图像处理-多阈值分割

    多阈值分割 在某些时候图像使用单独的阈值不能够对其实现有效地分割,例如在灰度直方图中有明显的三个峰时候,我们需要提取中间峰,这时我们使用双阈值分割会得到较好的分割效果。如下例子中生成灰度直方图中有两个峰,选择合适的两个阈值进行多阈值分割后可生成

    2024年02月09日
    浏览(49)
  • 图像分割---基于阈值处理的基本方法

    本文主要介绍图像分割基于阈值处理的一些基本方法。 该方法基于图像直方图上出现的双峰现象。当一个图像有双峰现象时,其直方图会出现两个峰,分别对应图像中两种不同的颜色或亮度区域。这时我们可以使用直方图双峰法来自动确定合适的阈值。其基本思路如下: 计

    2024年02月05日
    浏览(39)
  • 图像处理与计算机视觉--第五章-图像分割-自适应阈值分割

      在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所有的信息提供保留。实验室环境下,相应的素材是模板化的,但是将实验室方法应用于现实环境中时,我们会发现光影环境对于效果的影响其实是很大的。在这种情况下进行处理,

    2024年02月07日
    浏览(55)
  • 彩色图像处理之彩色图像直方图处理的python实现——数字图像处理

    彩色图像的直方图处理是一种重要的图像处理技术,用于改善图像的视觉效果,增强图像的对比度,或为后续的图像处理任务(如图像分割、特征提取)做准备。彩色图像通常由红色(R)、绿色(G)、蓝色(B)三个颜色通道组成,因此彩色图像的直方图处理相比单色图像更

    2024年01月23日
    浏览(68)
  • 【数字图像处理】直方图均衡化

    直方图均衡化是一种常见的图像增强方法,可以增强图像的对比度。其数学原理如下: 首先,我们需要了解直方图的概念。直方图是对图像像素分布的一种统计,它将每个像素值出现的次数记录下来,并以图形的方式呈现出来。在一幅图像中,像素值的范围通常是有限的。例

    2023年04月13日
    浏览(58)
  • 【数字图像处理】直方图均衡化与规定化

    目录 直方图处理技术概述 直方图均衡化 公式推导  Matlab代码实现 图像的规定化 数学推导 单映射 Matlab代码 效果展示​编辑  组映射 Matlab代码 灰度级范围[0,L-1]的数字图像,在实际使用中,用哥灰度级的像素总数除以MN的整幅图像的像素数量,归一化到规律中进行计算,这样

    2023年04月26日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包