数字图像处理基础(matlab)Ⅱ:图像的增强

1 图像边缘检测(matlab)

因为一些事情繁忙,图像处理部分一直未来得及更新,想到这部分其实不太难,再抽个时间更新一下吧

1.1 二阶算子介绍

在进行边缘检测时,我们其实有很多方式可以选择,最主要的是要找到合适的连通区域。车牌区域定位是一个复杂的任务,因为不同的图像可能会有不同的光照、角度和背景条件。这个时候如果能找到一个合适的算法,能够明显看出图像特征,问题便很简单了

1.2 拉普拉斯算子

Laplacian算子是一种基于二阶导数的边缘检测算法,计算简单且易于实现。对噪声较为稳健:由于Laplacian算子进行的是二阶导数运算,它对噪声有一定的抑制效果,因此在一定程度上能够对噪声进行平滑处理。
但是Laplacian算子对图像中细节的变化非常敏感,这导致其边缘检测结果可能不稳定,且容易产生较粗的边缘。Laplacian算子不能提供明确的边缘方向信息,只能检测出边缘的存在,但无法表达其方向。

1.3 Canny算子

1、精准的边缘检测:Canny算子通过多阶段的处理,包括高斯滤波、梯度计算、非极大值抑制和双阈值处理,能够提供相对精确的边缘检测结果。
2、低错误率:Canny算子通过设定两个阈值,可以有效地减少错误检测的边缘,提高了算法的准确性。
3、确定边缘方向:Canny算子使用梯度信息,能够准确地确定边缘的方向。
但是唯一的缺点就是计算量很大,如果想在硬件上实现较为困难

1.4 对比

精度:Canny算子在边缘检测的精度上优于Laplacian算子,特别是对于细节丰富的图像边缘检测效果更好。
复杂度:Laplacian算子计算简单,而Canny算子由于涉及多个步骤,因此计算复杂度较高。
抑制噪声:Laplacian算子在一定程度上对噪声有抑制作用,但Canny算子通过高斯滤波等步骤能够更好地减少噪声的影响。
边缘方向:Canny算子能够确定边缘的方向,而Laplacian算子不能提供明确的边缘方向信息。

1.5代码

%laplacian算子
b=imread('shiyan.jpg');
a=rgb2gray(b);
figure(1);
imshow(a);
title('原灰度图像');
a1=edge(a,'log');
figure(2);
imshow(a1);
title('Laplacian');
%canny算子
a2=edge(a,'canny');
figure(3);
imshow(a2);
title('Canny');

1.6 效果

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

大家可以根据结果猜测一下哪个是Canny算子

2 自动阈值算法

图像分割是图像处理中的一项重要任务,目的是将图像中的像素划分成不同的区域,以便进一步进行对象识别、分析和处理。为了实现图像的自适应阈值分割,让我们更好的定位车牌,由此出现了自动阈值算法

2.1 自动阈值算法原理

自动阈值算法是一种图像分割方法,其主要原理是通过迭代或其他方式寻找合适的阈值,将图像中的像素分为不同的区域,从而实现目标的分割和提取。

这里使用的是一种基于均值迭代的自适应阈值分割算法,通过迭代计算像素值的均值,并根据均值来更新阈值,不断迭代直到阈值稳定。

1、将彩色图像读取并转换为灰度图像,然后进行归一化处理,将像素值映射到[0, 1]之间。
2、初始化一个初始阈值T1,一般取图像的最大像素值和最小像素值的平均值作为初始阈值。
3、开始迭代过程,设定一个迭代停止的门限值T0,用于判断自适应阈值是否稳定。这个门限值一般设为一个较小的正数,比如0.1。
4、在每一次迭代中,遍历图像的所有像素。根据当前的阈值T1,将像素分为两组:大于阈值的像素属于一组(用数组G1存储),小于等于阈值的像素属于另一组(用数组G2存储)。
5、计算数组G1和G2中像素值的平均值ave1和ave2。这两个平均值分别代表了两个像素组的像素值均值。
6、计算新的自适应阈值T2,通过两个像素组的像素值均值ave1和ave2的平均值来更新阈值:T2 = (ave1 + ave2) / 2。
7、检查新旧自适应阈值之间的变化是否小于等于门限T0,即是否满足 abs(T2 - T1) < T0。如果满足,则说明阈值已经稳定下来,迭代过程结束。
8、如果新旧阈值之间的变化大于门限T0,则继续迭代。将T2赋值给T1,然后重置数组G1和G2的索引,并进入下一次迭代。在迭代结束后,得到了最终稳定的自适应阈值T1。

2.2 代码

a=imread('shiyan.jpg');
b=rgb2gray(a);
figure(1);
imshow(b);
title('原灰度图像');
a1=im2double(b); %对图像归一化处理
[M,N]=size(a1); 
T0=0.1; %设置门限
T1=(max(max(a1)) +min(min(a1)))/2; %算出自动阈值
m=1;
n=1;
while 1
    for i=1:M
        for j=1:N
            if a1(i,j)>T1
                G1(m)=a1(i,j);
                m=m+1;
            else
                G2(n)=a1(i,j);
                n=n+1;
            end
        end
    end
    
    ave1=mean(G1);%求平均
    ave2=mean(G2);%同上
    T2=(ave1+ave2)/2;
    if abs(T2-T1)<T0 %是否结束循环
        break;
    end
    T1=T2;
    m=1;
    n=1;
end
figure(2);
imshow(a1,[0.6,0.8]);
title('自动阈值图像');

2.3效果

在这里插入图片描述
在这里插入图片描述
大家可以很明显看到,经过自动阈值处理之后,车牌效果很明显。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值