假期呆实验室,老师给的一些小任务,拿来作为第一篇博客练手
图像梯度的概念: 详情请看:图像梯度的基本原理
重点在于:图像的梯度和函数的梯度概念差不多,图像可以看做是离散的函数,每个离散点即为像素。根据梯度的微分表达式可得,图像的梯度可以相当于2个相邻像素之间的差值。相邻两个像素的像素值相差越大,梯度越大。可以用做提取边缘信息。
思路:读取图片后,转化为灰度图,再转化为double类型。根据图像梯度的概念,分别算x和y反向上的梯度,然后相加,作为这一像素的像素值。然后将梯度图(提取的边缘信息图)与原图像相加,得到合成图,相当于给原图像增强了边缘。
为什么要转化为double类型? 因为imread()读入的图像是uint8类型,将原图像的灰度值转换成double的作用主要是考虑计算过程中的精度的问题,double 的数据是有小数点的,而uint8是0-255的整数,如果直接用uint8计算,会在计算过程中产生舍入误差,这种误差在图像的数据中是比较大的误差。显示的时候是因为我们的显示系统采用的颜色模式大多为RGB模式,其每一种颜色分量的取值只能在0-255,所以显示时要用uint8数据。
为什么要把图像转为灰度图进行处理? 我们识别物体,最关键的因素是梯度(现在很多的特征提取,SIFT,HOG等等本质都是梯度的统计信息),梯度意味着边缘,这是最本质的部分,而计算梯度,自然就用到灰度图像了。颜色本身,非常容易受到光照等因素的影响,同类的物体颜色有很多变化。所以颜色本身难以提供关键信息。
以上转自小波变换图像融合-1-代码分析