长杆在太阳下的影长度处理方法

首先来看原图像

原图像中光干扰较大,因此我们后面的处理会使用下图红框这样只有杆影的局部区域进行计算。

图像切割拆分

视频的图像帧数为25帧长度为从8:54:06到9:34:46共40min,把图像每隔3min切割一张(3min=25*180=4500帧)并保存

clc
clear
obj = VideoReader('Appendix4.avi')
numFrames = obj.NumberOfFrames
for k = 1 :4500: numFrames
    frame = read(obj,k);
    imshow(frame);
    %imwrite(frame,strcat(num2str(k),'.jpg'),'jpg');
end

图像处理

Canny边缘检测

Canny边缘检测算法的处理流程

Canny边缘检测算法可以分为以下5个步骤:

  1. 使用高斯滤波器,以平滑图像,滤除噪声。
  2. 计算图像中每个像素点的梯度强度和方向。
  3. 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
  4. 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
  5. 通过抑制孤立的弱边缘最终完成边缘检测。 下面详细介绍每一步的实现思路。

高斯平滑滤波

为了尽可能减少噪声对边缘检测结果的影响,所以必须滤除噪声以防止由噪声引起的错误检测。为了平滑图像,使用高斯滤波器与图像进行卷积,该步骤将平滑图像,以减少边缘检测器上明显的噪声影响。大小为(2k+1)x(2k+1)的高斯滤波器核的生成方程式由下式给出:

图像中的高斯卷积核由下面公式得到:

下面是一个sigma = 1.4,尺寸为3x3的高斯卷积核的例子(需要注意归一化):

若图像中一个3x3的窗口为A,要滤波的像素点为e,则经过高斯滤波之后,像素点e的亮度值为:

其中*为卷积符号,sum表示矩阵中所有元素相加求和。

高斯卷积核大小的选择将影响Canny检测器的性能。尺寸越大,检测器对噪声的敏感度越低,但是边缘检测的定位误差也将略有增加。

计算梯度强度和方向

图像中的边缘可以指向各个方向,因此Canny算法使用四个算子来检测图像中的水平、垂直和对角边缘。边缘检测的算子(如Roberts,Prewitt,Sobel等)返回水平Gx和垂直Gy方向的一阶导数值,由此便可以确定像素点的梯度G和方向theta。

其中G为梯度强度, theta表示梯度方向,arctan为反正切函数。下面以Sobel算子为例讲述如何计算梯度强度和方向。

x和y方向的Sobel算子分别为:

其中Sx表示x方向的Sobel算子,用于检测y方向的边缘; Sy表示y方向的Sobel算子,用于检测x方向的边缘(边缘方向和梯度方向垂直)。在直角坐标系中,Sobel算子的方向如下图所示。

若图像中一个3x3的窗口为A,要计算梯度的像素点为e,则和Sobel算子进行卷积之后,像素点e在x和y方向的梯度值分别为:

其中*为卷积符号,sum表示矩阵中所有元素相加求和。根据公式(3-2)便可以计算出像素点e的梯度和方向。

非极大值抑制

非极大值抑制是一种边缘稀疏技术,非极大值抑制的作用在于“瘦”边。对图像进行梯度计算后,仅仅基于梯度值提取的边缘仍然很模糊。对于标准3,对边缘有且应当只有一个准确的响应。而非极大值抑制则可以帮助将局部最大值之外的所有梯度值抑制为0,对梯度图像中每个像素进行非极大值抑制的算法是:

  1. 将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较。
  2. 如果当前像素的梯度强度与另外两个像素相比最大,则该像素点保留为边缘点,否则该像素点将被抑制。undefined通常为了更加精确的计算,在跨越梯度方向的两个相邻像素之间使用线性插值来得到要比较的像素梯度,现举例如下:
梯度方向分割

梯度方向分割

如上图所示,将梯度分为8个方向,分别为E、NE、N、NW、W、SW、S、SE,其中0代表00~45o,1代表450~90o,2代表-900~-45o,3代表-450~0o。像素点P的梯度方向为theta,则像素点P1和P2的梯度线性插值为:

非极大值抑制的伪代码描写如下:

梯度方向的计算要和梯度算子的选取保持一致。

遍历当前目录所有截图并且读取图像并且提取兴趣区域(裁剪出只有杆子影子的图像区域),对图像进行灰度化处理,方便转化为二值化图像,转化为二值图像以后使用Canny边缘检测算法,提取图像边缘,过滤噪声图像区域只保留影子变化区域。

经过上述步骤后从右至左遍历图像,寻找最右的像素坐标点即为影子顶点。

过滤噪声前图像:

过滤前

过滤噪声后图像:

过滤后
clc
clear
count=1
for i=1:4500:58501
    %disp(strcat(num2str(i),'.jpg'));
    BW=imread(strcat(num2str(i),'.jpg'));
    BW=imcrop(BW,[922 850 800 90]);
    BW=rgb2gray(BW);
    thresh=[0.1,0.17];
    sigma=1.4;%定义高斯参数
	%Canny边缘检测
    f = edge(double(BW),'canny',thresh,sigma);
    for i=50:1:91
        for j=520:1:900
            f(i,j)=0;
        end
    end
    %figure(1),imshow(imcrop(f,[520 40 1000 80]),[]);
    [f,x,y]=find_pwite(f);
    dis_x(1,count)=x;
    dis_y(1,count)=y;
    count=count+1;
    %imwrite(f,strcat(num2str(count),'.jpeg'),'jpg');
    figure(i),imshow(f,[]);
    %[x,y,button] = ginput
end

绘制时间变化图像

for i=1:length(dis_x);
    h(1,i)=power(power(dis_x(1,i),2)+power(dis_y(1,i),2),1/2);
end
t=8.9:0.05:9.55;
plot(t,h,'r');

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏瓜大三哥

图像分割(二)

图像分割(二) 之基于边缘分割 所谓边缘是指图像中两个不同区域的边界线上连续的像素点的集合,是图像局部特征不连续的反应,体现了灰度、颜色、纹理等图像特性的突变。...

2327
来自专栏智能算法

卷积神经网络工作原理直观解释

其实我们在做线性回归也好,分类(逻辑斯蒂回归)也好,本质上来讲,就是把数据进行映射,要么映射到一个多个离散的标签上,或者是连续的空间里面,一般简单的数据而言,...

1702
来自专栏null的专栏

机器学习中的特征空间

声明:这篇博文主要是对参考文献中的那个PPT的学习之后记下的一些笔记,整理出来与大家一起分享,若笔记中有任何错误还请不吝指出,文中可能会使用到原作者的一些图,若...

4446
来自专栏SIGAI学习与实践平台

自然场景文本检测识别技术综述

白蛇: 白纸黑字的扫描文档识别技术已经很成熟,而自然场景图像文本识别的效果还不理想。倾斜字、艺术字、变形字、模糊字、形似字、残缺字、光影遮蔽、多语言混合文本等应...

5252
来自专栏机器人网

强大的卷积网络是如何运行?

首先,卷积网络认知图像的方式不同于人类。因此,在图像被卷积网络采集、处理时,需要以不同方式思考其含义。 卷积网络将图像视为体,也即三维物体,而非仅用宽度和高度测...

2828
来自专栏计算机视觉

图片风格转移A Neural Algorithm of Artistic Style

这篇论文的目的,如下图所示。把我们的图变成梵高的风格,厉害了~ ? 上图为原图,下图为调整后的图 传统图像风格迁移的过程是:分析图像风格(比如说梵高的星空这种蓝...

3627
来自专栏AILearning

【机器学习实战】第7章 集成方法 ensemble method

第7章 集成方法 ensemble method ? 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:...

2579
来自专栏智能算法

卷积神经网络工作原理直观解释

其实我们在做线性回归也好,分类(逻辑斯蒂回归)也好,本质上来讲,就是把数据进行映射,要么映射到一个多个离散的标签上,或者是连续的空间里面,一般简单的数据而言,我...

3335
来自专栏AI科技大本营的专栏

笔记 |《深度学习原理与TensorFlow实践》学习笔记(四)

作者 | 王清 目录 CNN应用之图像风格化实例 如何量化风格 快速风格化的两种模型训练生成风格的滤镜 生成对抗网络介绍GAN GAN的基本思想 GAN的基本框...

3057
来自专栏量化投资与机器学习

【机器学习课程】经典算法之——AdaBoost在量化投资中的应用(附代码和很多论文资料)

1算法简介 AdaBoost是由Yoav Freund和Robert Schapire提出自适应增强的一种机器学习方法。AdaBoost算法的自适应在于:前一个...

2176

扫码关注云+社区

领取腾讯云代金券