图像处理之其他杂项 小知识点汇总

                                       图像处理之其他杂项       小知识点汇总

1.像素读取   来自于:C++下的OpenCV中Mat类型存储的图像格式

使用at方式进行访问,在at的时候需要指定的数据类型对照表如下:

种类 C1 C2 C3 C4 C6
uchar8U uchar cv::Vec2b cv::Vec3b cv::Vec4b  
char8S          
ushort16U          
short16S short cv::Vec2s cv::Vec3s cv::Vec4s  
int32S int cv::Vec2i cv::Vec3i cv::Vec4i  
float32F float cv::Vec2f cv::Vec3f cv::Vec4f cv::Vec6f
double64F double cv::Vec2d cv::Vec3d cv::Vec4d cv::Vec6d

2.类型转换  convertTo中使用相关知识。。来自于:opencv中类型转换问题 

在学习立体匹配算法中BM算法时,出现在了关于类型转换的问题 :disp.convertTo(disp8u, CV_8U, 255 / (numberOfDisparities*16.)) 255(numberOfDisparities*16.)) 
不知道为什么做此转换,经过资料的查阅,终于解惑啦! 
在opencv中,如果是float形式,如果用imshow函数显示,只会显示像素值在0.0-1.0之间的,如果像素值大于1.0会显示为白像素,小于0.0显示为黑。为了可视化float形式的图像。可以将它的值归一化到0-1; 
同理,如果用convertTo函数(src.convertTo(dst, type, scale, shift)创建指定类型的矩阵,当值超过显示范围时,则将它限制为最大值或者最小值。 
所以当目标数据类型为cv_8U时,需要将值图像的像素值约束在0-255之间,所以就靠scale和shift来做缩放,假设矩阵A的最大值为max最小值为min,则

if (Min!=Max){ 
    A -= Min;
    A.convertTo(B,CV_8U,255.0/(Max-Min));
}
所以本段代码中,disp为视差图,最小视差默认为0,numberOfDisparities为最大视差与最小视差的差值,除以16则是根据邹老师的说法,得到的结果是CV_16S,需要除以16才能得到正确的视差值。

3.RGB图转灰度图      来自于:瞎搞系列-边缘检测

边缘检测是基于对图像灰度差异运算而实现的,如果输入的是RGB,则需要先进行灰度图变换。RGB转灰度图的一个常用公式为:

Gray = R*0.299 + G*0.587 + B*0.114。

4.图像频谱表示    来自于:理解图像中的低频分量和高频分量

总得来说,低频分量(低频信号)代表着图像中亮度或者灰度值变化缓慢的区域,也就是图像中大片平坦的区域,描述了图像的主要部分。高频分量(高频信号)对应着图像变化剧烈的部分,也就是图像的边缘(轮廓)或者噪声以及细节部分。 
之所以说噪声也对应着高频分量,是因为图像噪声在大部分情况下都是高频的。 
低频分量:主要对整幅图像强度的综合度量。高频分量:主要是对图像边缘和轮廓的度量。而人眼对高频分量比较敏感。 
我们试着用傅立叶变换站在另外一个角度观察图像,将图像从灰度分布转化到频率分布(频谱图)上去观察图像的特征。需要了解的是,图像进行二维傅立叶变换之后得到的频谱图,就是图像梯度的分布图。具体的,傅立叶频谱图上我们能看到明暗不一的亮点,实际是图像上某一点与邻域点差异的强弱,即梯度的大小。 
所以说,如果一幅图像的各个位置的强度大小相等,则图像只存在低频分量。从图像的频谱图上看,只有一个主峰,且位于频率为零的位置.。需要提一句的是,图像的频谱图可以由傅里叶变换得到。 
如果一幅图像的各个位置的强度变化剧烈,则图像不仅存在低频分量,同时也存在多种高频分量。从图像的频谱上看,不仅有一个主峰,同时也存在多个旁峰。可以这样理解:图像中的低频分量就是图像中梯度较小的部分,高频分量则相反。 
从直方图上看,低频分量对应直方图内大块区域,而小块或者离散的区域就是高频分量。这说明低频分量占据了图像的主要部分。 
从二维函数上理解,变化剧烈的地方就是高频分量,变化少的地方就是低频分量。

猜你喜欢

转载自blog.csdn.net/coming_is_winter/article/details/88371170
今日推荐