一种基于波状扩散特征分析的光斑检测方法

背景

电子产品发展日新月异,各种智能设备层出不穷,例如智能手机、笔记本电脑和平板电脑等。其中,智能设备屏幕是影响用户体验的重要因素,因为用户在使用智能设备时,与智能设备进行人机交互的主要手段是通过智能设备的屏幕来实现的,所以屏幕好坏直接影响到用户体验。
然而,目前识别设备屏幕光斑是通过相关人员的人工观察确定。肉眼观察的方式受主观因素干扰较大,且人力成本较高、效率和准确率较低。
本文针对传统识别光斑的方式存在的不足,提出一种基于图像分析的光斑检测方法。本文通过提取光斑图像的波纹状扩散特征,增强识别能力,该方法对于待检图片中光斑的亮度没有依赖,对于较亮或较暗的光斑都可以检测成功,也不要求采用单色图案进行检测,复杂图案也可以进行检测,因此适应面更广。

方案原理

本方案的原理如下图所示。图1为原始光斑示意图。图2为光斑波纹状扩散示意图,即通过算法分析原始图像的亮度变化规律,获得呈波纹状扩散开的光斑图像。理论上,只要能通过特定算法获取待检图片中的类似波纹扩散特征,就能较准确地检测出光斑位置。

图1 原始光斑示意图
在这里插入图片描述

图2 光斑波纹状扩散示意图
在这里插入图片描述

核心步骤

本方法的核心步骤包括:
1、待检测图片经过基本图像处理算法处理后,再经过本发明的波纹状扩散检测算法提取到波状扩散的图像特征,再附加其他光斑过滤增强条件提取出光斑位置;
2、步骤1的波纹状扩散检测算法,具体包括:
1)将基本图像处理后获取的灰度图,按照亮度从低到高或从高到底进行区间划分,亮度区间步长可以配置,每个区间的区间亮度值也可以配置,每个区间的亮度值可以设置为本区间亮度范围的任意值,一般统一设置为最低亮度、最高亮度或中间值;可全局设置所有区间的亮度最小边界值、最大边界值;
2)遍历由1)步骤获取的所有亮度区间,针对每个亮度区间,找出灰度图中的所有像素,如果该像素的亮度在该区间内,则将像素的灰度值统一设置为区间亮度值;
经过以上两步,即可获得处理后的图像,简称光斑波纹状扩散图;
3、步骤1的基本图像处理,包括但不限于灰度化、腐蚀、膨胀、阈值等算法;
4、步骤1的附加其他光斑过滤增强条件提取出光斑位置,具体包括:
1)基于光斑波纹状扩散图,按照从低到高或从高到低的阈值范围分别获取连通域,阈值起始值、终止值、步长可以配置,经过本步可以获取所有的连通域列表;
2)根据连通域的嵌套层级数量、各层面积等单因素或组合因素,进行单条件或多条件联合检测;

以手机屏幕光斑检测为例,说明本方法的实施例,本发明的检测方法不限于手机屏幕的光斑检测,还包括其他各种屏幕的光斑检测。
下图为手机屏幕光斑检测的整体流程图:
在这里插入图片描述

图3 整体模块流程的示意图

效果展示

效果如下所示:
1.待检测图片
在这里插入图片描述

图4 原始输入图片
2.输出的波状扩散图
在这里插入图片描述

图5 波状扩散图片

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 阈值法 该方法将图像进行二值化处理,然后找到光斑最亮点的位置作为光斑中心。代码如下: ```matlab I = imread('image.jpg'); % 读取图像 I = rgb2gray(I); % 转为灰度图像 level = graythresh(I); % 自适应阈值 bw = im2bw(I, level); % 二值化 [y, x] = find(bw == 0); % 找到光斑最亮点的位置 center = [mean(x), mean(y)]; % 计算光斑中心 ``` 2. 二次拟合法 该方法光斑周围的像素点拟合成二次函数,然后找到函数的极值点作为光斑中心。代码如下: ```matlab I = imread('image.jpg'); % 读取图像 I = rgb2gray(I); % 转为灰度图像 [y, x] = find(I == max(I(:))); % 找到光斑最亮点的位置 roi = I(y-20:y+20, x-20:x+20); % 取光斑周围的像素点 [X, Y] = meshgrid(1:size(roi,2), 1:size(roi,1)); X = X(:); Y = Y(:); Z = roi(:); p = polyfitn([X, Y], Z, 2); % 二次拟合 [x0, y0] = fminsearch(@(p) polyvaln(p, [x,y]), p); % 找到极值点 center = [x0, y0]; ``` 3. 高斯拟合法 该方法光斑周围的像素点拟合成高斯函数,然后找到函数的极值点作为光斑中心。代码如下: ```matlab I = imread('image.jpg'); % 读取图像 I = rgb2gray(I); % 转为灰度图像 [y, x] = find(I == max(I(:))); % 找到光斑最亮点的位置 roi = I(y-20:y+20, x-20:x+20); % 取光斑周围的像素点 [X, Y] = meshgrid(1:size(roi,2), 1:size(roi,1)); X = X(:); Y = Y(:); Z = roi(:); gauss = fit([X, Y], Z, 'gauss2'); % 高斯拟合 center = [gauss.b1, gauss.a1]; ``` 4. 梯度法 该方法计算图像的梯度,然后找到梯度最大的位置作为光斑中心。代码如下: ```matlab I = imread('image.jpg'); % 读取图像 I = rgb2gray(I); % 转为灰度图像 Gx = [-1 0 1; -2 0 2; -1 0 1]; % x方向的Sobel算子 Gy = Gx'; % y方向的Sobel算子 Ix = imfilter(double(I), Gx); % x方向梯度 Iy = imfilter(double(I), Gy); % y方向梯度 grad = sqrt(Ix.^2 + Iy.^2); % 梯度幅值 [y, x] = find(grad == max(grad(:))); % 找到梯度最大的位置 center = [x, y]; ``` 5. Hough变换法 该方法光斑周围的像素点作为圆心,计算它们到光斑最亮点的距离,然后在距离和半径的极坐标空间中找到峰值点作为光斑中心和半径。代码如下: ```matlab I = imread('image.jpg'); % 读取图像 I = rgb2gray(I); % 转为灰度图像 [y, x] = find(I == max(I(:))); % 找到光斑最亮点的位置 roi = I(y-20:y+20, x-20:x+20); % 取光斑周围的像素点 [rows, cols] = size(roi); [xx,yy] = meshgrid(1:cols, 1:rows); [~, radius] = imfindcircles(roi,[10 20],'ObjectPolarity','dark'); % 使用imfindcircles函数找到圆心和半径 center = [x, y] - [mean(radius), mean(radius)]; ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

揽星河2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值