图像处理第一次作业
出于对自己的保护所以仅展示老师讲解过的内容~
贴一句可可爱爱的老师口头禅——“是不是啊”
碎碎念,下面伪彩色的函数名写错了喜提“第三节课荣誉点评”,记得改成
pseudo-color
😅贴一个【前辈的博客】,供参考
1.作业要求
写出图像处理、图像分析、计算机图形学、机器视觉、深度学习、图像测量、图像识别、体视、光圈、景深、运动模糊、pixel、fps、dpi、二值图像等概念的定义及其对应的中英文.
学习.bmp文件的格式,一般是文件信息描述、数据信息描述、调色板、图像数据4个部分组成,彩色图像没有调色板。什么是调色板?什么是伪彩色?是如何实现的?用C/C++编程实现一幅灰度图像bmp文件H0101Gry.bmp和彩色图像bmp文件H0102Rgb.bmp的读取、反相以及灰度图像H0101Gry.bmp的伪彩色,将处理结果图像保存成bmp文件.
在www.onsemi.com网站,寻找2款分别是全局曝光和滚动曝光的图像传感器,给出它们的型号,并比较它们的帧率、像素数、像元尺寸、靶面大小、感光曲线和最低工作温度等方面的差异.
在www.jai.com网站,寻找2款不同计算机接口、不同分辨率、不同光谱数、不同镜头卡口的摄像机,给出它们的型号,并比较它们的帧率、分辨率、曝光方式、重量与体积、工作温度范围、应用领域等方面的差异.
2.作业答案
2.1 第一题
名称(中文) | 名称(英文) | 定义 |
---|---|---|
图像处理 | Image Processing | 输入是图像数据,输出也是图像数据。涉及到“输入是图像数据,输出也是图像数据”的理论与方法,是图像处理的研究范畴。 |
图像分析 | Image Analysis | 输入是图像数据,输出是可描述性数据。涉及到“输入是图像数据,输出是可描述性数据”的理论与方法,是图像分析的研究范畴。 |
计算机图形学 | Computer Graphics | 输入是可描述性数据,输出是图像数据。涉及到“输入是可描述性数据,输出是图像数据”的理论与方法,是计算机图形学的研究范畴。说白了就是如何把可描述数据以更逼真的图像的形式展现出来。 |
机器视觉 | Computer Vision | 机器视觉是要代替人眼,是一种系统,是图像处理和图像分析的应用,是使用图像测量代替人眼目测,其核心是图像测量。 |
深度学习 | Deep Learning | 深度学习是一类模式分析方法的统称,是一种主要使用深度神经网络为工具的机器学习算法。 |
图像测量 | Image Measurement | 即处理器运用边缘检测、图像分割、轮廓跟踪、形状分析、目标匹配等图像分析技术,检测和定位目标,并测量目标的关键参数。 |
图像识别 | Image Recognition | 图像识别,是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对象的技术,是一种实践应用。 |
体视 | Stereo | 当观察外界物体时,除了能够知道物体的大小、形状、亮度以及表面颜色以外,还能够产生远近的感觉。 |
光圈 | Aperture | 一种摄影术语,是一个用来控制光线透过镜头进入机身内感光面光量的装置,通常设置在镜头内。 |
景深 | Depth of Field(DOF) | 在摄影机镜头或其他成像器前沿能够取得清晰图像的成像所测定的被摄物体前后距离范围。 |
运动模糊 | Motion Blur | 指的是在曝光期间物体和相机发生了相对位移。 |
二值图像 | Binary Image | 是指将图像上的每一个 像素 只有两种可能的取值或灰度等级状态,也就是说,图像中的任何像素点的灰度值均为0或者255,分别代表黑色和白色。 |
名称(英文) | 名称(中文) | 定义 |
---|---|---|
pixel | 像素 | 照片或者单帧图像都可以看成是由𝑥轴和𝑦轴表示的两维数据,若将图像简单视作图像矩阵F,矩阵中的每个元素对应着图像的一个点或者区域,称为像素。 |
fps | 帧率 | 是指画面每秒传输帧数,指动画或视频的画面数。 |
dpi(Dots per Inch) | (每英寸点数)扫描精度 | 图像每英寸长度内的像素点数。 |
2.2 第二题
(1)调色板:图像处理中为了节省表示图像RGB信息的空间,用调色板存储色彩信息(RGB值),数据区只存储当前象素的色彩在调色板中的位置,这样就省了很多字节。不过真彩色的图像没有调色板。调色板是颜色的索引,只用于 8 位图像,16 位以上就没有了。
(2)伪彩色定义以及如何实现:图像的每个像素的颜色不是由每个基本色分量的数值直接决定,实际上是把像素当成调色板(Palettes)或颜色查找表(Color Look-Up Table,CLUT)的表项入口地址,根据该地址可查找出包含实际 R、G、B 的强度值,如果图像中的颜色在调色板或彩色查找表中不存在,则调色板会用一个最为接近的颜色来匹配。通过查找出的 R、G、B 强度值产生的色彩不是图像本身真正的颜色,因此称为伪彩色。实现方式:查找映射。
(3)C++编程:
vecode成功运行截图:
灰度图片反相:
//灰度图反相
void InvertGry(unsigned char *pGryImg,int width,int height){
unsigned char *p,*pEnd=pGryImg+width*height;//指针,图片文件末尾
for(p=pGryImg;p<pEnd;p++){
*p=255-*p;
}
return;
}
彩色图片反相:
//彩色图反相
void invertColor(unsigned char * pRgbImg,int width,int height){
unsigned char *p,*pEnd=pRgbImg+width*height*3;//三通道的数据
for(p=pRgbImg;p<pEnd;p++){
*p=255-*p;
}
return;
}
灰度图片伪彩色:利用如下图的一种常见的基于灰度值阶数不同而实现的伪彩色映射。其将256阶灰度阶数分为四段,分别对应R、G、B三通道下的不同映射函数。
bool fakeGry2Color(unsigned char *pGryImg,int width,int height,const char *filename){
BITMAPFILEHEADER fileHeader;
BITMAPINFOHEADER dataHeader;
FILE *fp;
int i, ext;
BYTE p[4],*pCur;
if( (fp=fopen(filename,"w+b"))==NULL ) return false;
fileHeader.bfType= ((WORD) ('M' << 8) | 'B');
fileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+256*4L; //灰度值起始位置,调色板大小为256*4
fileHeader.bfSize=fileHeader.bfOffBits+width*height ;
fileHeader.bfReserved1=0;
fileHeader.bfReserved2=0;
fwrite((void *)&fileHeader, sizeof(BITMAPFILEHEADER), 1, fp);
memset((void *)&dataHeader, 0, sizeof(BITMAPINFOHEADER));
dataHeader.biSize = 40;
dataHeader.biWidth = width;
dataHeader.biHeight = height;
dataHeader.biPlanes = 1;
dataHeader.biBitCount = 8;
fwrite((void *)&dataHeader, sizeof(BITMAPINFOHEADER), 1, fp);
/**********************************************************************/
//TODO:下面是自己改写的板块,调色板规则修改,不再是单一颜色,而是三色的混合
p[0]=p[1]=p[3]=p[2]=0;//2-r 0-b 1-g 3-黑色
for(int i=0;i<256;i++){
//源程序这一段是:p[2]=i,生成红色伪彩色图片,图片清晰度较高但是类似于给灰度图加上红色滤镜,实际上并没有实现多种色彩
if(i<64){
p[0]=255;
p[1]=i;
p[2]=0;
}else if(i<128){
p[0]=255-i;
p[1]=255;
p[2]=0;
}else if(i<196){
p[0]=0;
p[1]=255;
p[2]=i;
}else{
p[0]=0;
p[1]=255-i;
p[2]=255;
}
fwrite((void *)p,sizeof(BYTE),4,fp);
}
/**********************************************************************/
ext=(width+3)/4*4-width; //每行字节个数需要按4的倍数对齐
if (ext==0)
{
for(pCur=pGryImg+(height-1)*width;pCur>=pGryImg;pCur-=width) //倒写
{
fwrite((void *)pCur, sizeof(BYTE), width, fp);
}
}
else
{
p[0] = p[1] = p[2] = p[3] = 0; //扩充的数据设为0
for(pCur=pGryImg+(height-1)*width;pCur>=pGryImg;pCur-=width) //倒写
{
fwrite((void *)pCur, sizeof(BYTE), width, fp); //图像数据
fwrite((void *)p, sizeof(BYTE), ext, fp); //扩充数据
}
}
fclose(fp); //关闭文件
return true;
}
最终呈现结果如下图,可以看到基本实现了“伪彩色”,但是单一粗暴地按照上图地函数划分RGB赋值块会使得图片与原始灰度图比较起来显得“色块分明”,“界限感”较大。
而当将程序中注释为TODO下面的那一段分段赋值分别改成p[0]=i
,p[1]=i
,p[2]=i
时候,呈现出下图的形式(即分别只激活蓝色、绿色和红色的效果):
2.3 第三题
寻找2款分别是全局曝光和滚动曝光的图像传感器,给出它们的型号,并比较它们的帧率、像素数、像元尺寸、靶面大小、感光曲线和最低工作温度等方面的差异
类型 | 全局曝光 | 滚动曝光 |
---|---|---|
型号 | PYTHON500: CMOS Image Sensor, 0.5 MP (SVGA), Global Shutter | [AR0130CS: CMOS 图像传感器,1.2 MP,1/3”](AR0130CS: CMOS Image Sensor, 1.2 MP, 1/3” (onsemi.cn)) |
帧率 | 545 帧/秒 | 60帧/秒 |
像素数 | 800x600 | 1280 (H) × 960 (V) |
像元尺寸 | 4.8 µm x 4.8 µm | 3.75µm x 3.75µm |
靶面大小 | 1/3.6inch | 1/3.0 inch |
感光曲线 | 下图(a) | 下图(b) |
最低工作温度 | −40°C | -30℃ |
(a)
(b)
2.4 第四题
寻找2款不同计算机接口、不同分辨率、不同光谱数、不同镜头卡口的摄像机,给出它们的型号,并比较它们的帧率、分辨率、曝光方式、重量与体积、工作温度范围、应用领域等方面的差异.
型号 | FS-3200D-10GE | SP-12000M-CXP4 |
---|---|---|
计算机接口 | 10 Gbps GigE Vision | CoaXPress 接 口 -4-Cable (PoCXP) |
分辨率 | 2048 x 1536 px | 4096 x 3072 px |
光谱数 | 2-bands Visible + NIR | Visible |
镜头卡口 | C口 | F 口 或 M-42x1 口 |
帧率 | 123fps | 189fps |
曝光方式 | 全局曝光 | 全局曝光 |
重量 | 270g | 510g |
体积 | 62x62x86.5mm | 62 x 62 x 127.5mm |
工作温度范围 | -5°C 至+ 45°C | -5°C 至+ 30°C |
应用领域 | 水果蔬菜检验、LCD 显示器、电子产品检验…… | 适合需要在大范围内进行详细分析的高性能检测应用 |