2017-01-09 19:41:55 shengshengwang 阅读数 758

1. 等效35mm相机焦距

解析:实际焦距是特定相机的参数,由于目前CCD尺寸多种多样,因此,实际焦距也是多种多样。为此,将各种相机

实际焦距都换算成35mm相机的焦距称为等效焦距,这样,不同CCD尺寸的相机就可以在一个平台基础上比较了。

如下所示:


说明:根据相似三角形原理,通过135胶片对角线,实际焦距,等效焦距可以计算出CCD对角线。


2. 红外传感器

解析:利用红外线的物理性质来进行测量的传感器。红外线又称红外光,它具有反射、折射、散射、干涉、吸收等性

质。任何物质,只要它本身具有一定的温度(高于绝对零度),都能辐射红外线。

说明:红外线测距离传感器是一种利用红外线反射原理对障碍物距离进行测量的传感器。


3. 3D扫描

解析:3D扫描是提取一个物体的表面和物理测量,并用数字的方式将其表示出来。这些数据被采集为一个由X,Y和Z

坐标(表示物体外部表面)组成的点云。对于一个3D扫描的分析可以确定被扫描物体的表面积、体积、表面形状、外

和特征尺寸。


4. 结构光

解析:结构光指一些具有特定模式的光,其模式图案可以是点、线、面等。结构光扫描法的原理是首先将结构光投射

至物体表面,再使用摄像机接收该物体表面反射的结构光图案,由于接收图案必会因物体的立体型状而发生变形,故

可以试图通过该图案在摄像机上的位置和形变程度来计算物体表面的空间信息。普通的结构光方法仍然是部分采用了

三角测距原理的深度计算。  


5. ToF(激光测距)

解析:基于飞行时间(Time of Flight,ToF)原理的摄像头,它通过测量光脉冲之间的传输延迟时间来计算深度信

息。比如,Mesa Imaging SwissRanger 4000,PMD Technologies CamCube 2.0等。

说明:激光、红外和超声常用于测距,而结构光常用于3D扫描。


6. DeepMask、SharpMask和MultiPathNet [1]

解析:Facebook开源了三款人工智能图像分割(Image Segmentation)软件,分别是DeepMask、SharpMask和

MultiPathNet,三款工具相互配合完成一个完整的图像识别分割处理流程,DeepMask生成初始对象mask、

SharpMask优化这些mask,最后由MultiPathNet来识别这些mask框定的物体。 


7. 红外线

解析:红外线是波长介于微波与可见光之间的电磁波,波长在760纳米(nm)至1毫米(mm)之间,比红光长的非可

见光。


8. 多通道图像遍历


9. cv2.resize()与cv2.pyrDown()、cv2.pyrUp()区别


10. DPI

解析:如果一台打印机的分辨率是4800×1200dpi,那么意味着在X方向(横向)上,两个墨点最近的距离可以达到

1/4800英寸;在Y方向(纵向)上,两个墨点的距离可以达到1/1200英寸。 


11. 变焦倍数

解析:变焦倍数指的是镜头的最大焦距除以最小焦距得出的数值。


12. 图像平面的平移与变换 [2][3]


13. 基于内容的图像搜索算法

解析:基于特征的图像检索有三个关键,一是要选择恰当的图像特征,二是要采取有效的特征提取方法,三是要有准

确的特征匹配算法。常用颜色特征(颜色直方图)和纹理特征(灰度共生矩阵)。灰度共生矩阵提供了影响灰度方

向、间隔和变化幅度的信息,但它并不能直接提供区别纹理的特性,因此需要在灰度共生矩阵(GLCM)的基础上提

取用来定量描述纹理特征的统计属性。如下所示:

(1)均值(Mean):反映纹理的规则程度。杂乱无章,值小;规律性强,值大。

(2)方差/标准差(Variance/Standard Deviation):反映像素值和均值偏差的程度。值大表示图像灰度变化大。

(3)能量(Energy)[角二阶矩(Angular Second Moment)]:反映图像灰度分布均匀程度和纹理粗细度。值大表示

纹理规则变化较为稳定,并且纹理粗。

(4)熵(Entropy):反映图像中纹理的非均匀程度或复杂程度。值大表示图像复杂。

(5)对比度(Contrast)[惯性矩]:反映图像清晰度和纹理沟纹深浅的程度。值大表示沟纹越深,并且效果清晰。

(6)逆差矩(Inverse Different Moment)[同质性(Homogeneity)][局部平稳性]:反映图像纹理局部变化的多少。

值大表示图像纹理不同区域间缺少变化,局部非常均匀。

(7)相关性(Correlation):反映灰度共生矩阵元素在行或列方向上的相似程度。与方差/标准差相反,反映某灰度

值沿某方向的延伸长度,若延伸越长则相关性越大。

(8)差异性(Dissimilarity):与对比度相似,但是是线性增加的。对比度高,差异性高。


14. 反射光和透射光

解析:光照射到物体表面,主要发生反射,透射(对透明物体),部分被吸收成热能。反射光和透射光决定了物体显

示的颜色。


参考文献:

[1] Facebook开源图像分割软件:https://www.oschina.net/news/76523/facebook-opensource-image-segmentation

[2] 平面中一个点绕任意点旋转θ度后的点的坐标:http://jingyan.baidu.com/article/2c8c281dfbf3dd0009252a7b.html

[3] 二维旋转矩阵:http://www.zybang.com/question/3338c3db1e24cdf63834a4fef0306185.html 

2014-12-19 14:18:08 u010922186 阅读数 2807


(本文章大部分内容参考Noah Snavely)


等你利用数码相机拍摄照片时,相机常常会在图片中嵌入很多有用的信息到JPEG文件中。通常涵盖曝光时间、焦点、(照相机,望远镜等的)光圈、是否闪光灯被开启了还有焦距等信息。焦距信息在绘制全景图的时候非常重要。下面将以提取EXIF中的焦距信息为例,并介绍如何将它转换成像素单元的表示(这样更利于全景图绘制中的图像缝合操作)。


第一步:提取EXIF标签

首先,我们需要从JPEG图像(“foo.jpg”)中提取出EXIF信息。为此,我们首先需要一个EXIF阅读器。这有很多的程序能够完成相应的操作,这里建议使用“jhead”,因为它便捷而且简单。你可以在(http://www.sentex.net/~mwandel/jhead/)获得相应版本的可执行文件。


下载 jhead.exe 之后,可以在命令行中键入“jhead.exe foo.jpg”,你会看到如下图所示的输出形式:

这样很容易获取焦距。上面的例子中的焦距为5.4mm。现在,应该考虑如何将这种厘米的形式转换成像素的形式。


第二步:获取CCD width

一旦我们有了焦距的毫米we would Google "dpreview Canon PowerShot S100 specifications.表示,一个简单的公式就可以将焦距转换成像素点的表示。首先,需要知道相机图像传感器的宽度。有时它被罗列在EXIF标记的列表中(CCD Width)。以个人经验来看,这个数字常常是不准确的,所以最好能够在后续过程中在线上加以验证。常常使用的方法是在http://www.dpreview.com/上寻找。仍然以上面的例子解释,我们使用的相近的型号是Canon PowerShot S100,我们可以Google " dpreview Canon PowerShot S100 specifications." ,其中就有我们需要的信息。在结果页面,搜索 "sensor size" 。以S100为例,我们可以查到相关的传感器尺寸为1/2.7""(5.27 X 3.96 mm). 这与EXIF给出的数据差异较小,但是dpreview的数据更为可信(5.27 mm)。


对于1/2.7""这种英寸比值的表达方式:


传统的照相机胶卷尺寸为35mm,35mm为胶卷的宽度(包括齿孔部分),35mm胶卷的感光面积为36 x 24mm。换算到数码相机,对角长度约接近35mm的,CCD/CMOS尺寸越大。在单反数码相机中,很多都拥有接近35mm的CCD/CMOS尺寸,例如尼康德D100,CCD/CMOS尺寸面积达到23.7 x 15.6,比起消费级数码相机要大很多,而佳能的EOS-1Ds的CMOS尺寸为36 x 24mm,达到了35mm的面积,所以成像也相对较好。

  现在市面上的消费级数码相机主要有2/3英寸、1/1.8英寸、1/2.7英寸、1/3.2英寸四种。CCD/CMOS尺寸越大,感光面积越大,成像效果越好。1/1.8英寸的300万像素相机效果通常好于1/2.7英寸的400万像素相机(后者的感光面积只有前者的55%)。而相同尺寸的CCD/CMOS像素增加固然是件好事,但这也会导致单个像素的感光面积缩小,有曝光不足的可能。但如果在增加CCD/CMOS像素的同时想维持现有的图像质量,就必须在至少维持单个像素面积不减小的基础上增大CCD/CMOS的总面积。目前更大尺寸CCD/CMOS加工制造比较困难,成本也非常高。因此,CCD/CMOS尺寸较大的数码相机,价格也较高。感光器件的大小直接影响数码相机的体积重量。超薄、超轻的数码相机一般CCD/CMOS尺寸也小,而越专业的数码相机,CCD/CMOS尺寸也越大。

  数码相机规格表中的CCD一栏经常写着“1/2.7英寸CCD”等。这里的“1/2.7英寸”就是CCD的尺寸,实际上就是CCD对角线的长度。

  1/2.7英寸,在这里不是普通的“1英寸=25.4mm”。由于结合了CCD亮相前摄像机上使用的摄像管和显示方式,因此,习惯上采用比较特殊的尺寸。1/2.7英寸为6.6mm,1/1.8英寸约为9mm。


第三步:将毫米值转换成像素值

一旦我们明确了焦距的毫米表示和 CDD width, 就可以很简单地经焦距表示为像素点的形式。我们最后还需要的信息是图像的像素宽度。这在 jhead 中的resolution中指定,上面的例子中为1600,下面给出相关的公式:

focal length in pixels = (image width in pixels) * (focal length in mm) / (CCD width in mm)

对于上面的例子,

focal length in pixels = 1600 pixels * 5.4mm / 5.27mm   = 1639.47 pixels

So the focal length we would use for the stitcher is 1639.47.

 




2014-04-19 15:59:37 xj2419174554 阅读数 964

题目1 焦距
时间限制:2000ms
单点时限:1000ms
内存限制:256MB
描述
      一般来说,我们采用针孔相机模型,也就是认为它用到的是小孔成像原理。在相机坐标系下,一般来说,我们用到的单位长度,不是“米”这样的国际单位,而是相邻像素的长度。而焦距在相机坐标系中的大小,是在图像处理领域的一个非常重要的物理量。假设我们已经根据相机参数,得到镜头的物理焦距大小(focal length),和相机胶片的宽度(CCD width),以及照片的横向分辨率(image width),则具体计算公式为:Focal length in pixels = (image width in pixels) * (focal length on earth) / (CCD width on earth)比如说对于Canon PowerShot S100, 带入公式得Focal length in pixels = 1600 pixels * 5.4mm / 5.27mm = 1639.49 pixels,现在,请您写一段通用的程序,来求解焦距在相机坐标系中的大小。

输入
多组测试数据。首先是一个正整数T,表示测试数据的组数。
每组测试数据占一行,分别为镜头的物理焦距大小(focal length on earth),,相机胶片的宽度(CCD width on earth),照片的横向分辨率大小(image width in pixels),单位为px。之间用一个空格分隔。


输出
每组数据输出一行,格式为“Case X: Ypx”。 X为测试数据的编号,从1开始;Y为焦距在相机坐标系中的大小(focallength in pixels),保留小数点后2位有效数字,四舍五入取整。


数据范围
对于小数据:focal length on earth和CCD width on earth单位都是毫米(mm)
对于大数据:长度单位还可能为米(m), 分米(dm), 厘米(cm), 毫米(mm), 微米(um),纳米(nm)


样例输入

    2
    5.4mm   5.27mm    1600px
    5400um  0.00527m  1600px

样例输出

    Case 1: 1639.47px
    Case 2: 1639.47px

题解:

      本题求焦距,简单,没什么说的。注意可能出现的大数,我保险起见用了Java,结果费了很多时间。不过也学了也谢BigDecimal的用法,得不偿失啊。好久没做题,感觉不太适应。

import java.math.BigDecimal;
import java.util.Scanner;


public class Main{
	

	
	public static void main(String[] str)
	{
		Scanner input=new Scanner(System.in);
		BigDecimal nm=new BigDecimal("0.000000001");
		BigDecimal um=new BigDecimal("0.000001");
		BigDecimal mm=new BigDecimal("0.001");
		BigDecimal cm=new BigDecimal("0.01");
		BigDecimal dm=new BigDecimal("0.1");
		String str1,str2,str3;
		int tag=0;
		int cas=input.nextInt();
		while(--cas>=0)
		{
			str1=input.next();
			str2=input.next();
			str3=input.next();
			BigDecimal a1,a2,a3,aa1,aa2;
			if('n'==str1.charAt(str1.length()-2))
			{
				aa1=nm;
				str1=str1.substring(0, str1.length()-2);
			}
			else if('u'==str1.charAt(str1.length()-2))
			{
				aa1=um;
				str1=str1.substring(0, str1.length()-2);
			}
			else if('m'==str1.charAt(str1.length()-2))
			{
				aa1=um;
				str1=str1.substring(0, str1.length()-2);
			}
			else if('c'==str1.charAt(str1.length()-2))
			{
				aa1=um;
				str1=str1.substring(0, str1.length()-2);
			}
			else if('d'==str1.charAt(str1.length()-2))
			{
				aa1=um;
				str1=str1.substring(0, str1.length()-2);
			}
			else 
			{
				aa1=new BigDecimal("1");
				str1=str1.substring(0, str1.length()-1);
			}
			
			if('n'==str2.charAt(str2.length()-2))
			{
				aa2=nm;
				str2=str2.substring(0, str2.length()-2);
			}
			else if('u'==str2.charAt(str2.length()-2))
			{
				aa2=um;
				str2=str2.substring(0, str2.length()-2);
			}
			else if('m'==str2.charAt(str2.length()-2))
			{
				aa2=um;
				str2=str2.substring(0, str2.length()-2);
			}
			else if('c'==str2.charAt(str2.length()-2))
			{
				aa2=um;
				str2=str2.substring(0, str2.length()-2);
			}
			else if('d'==str2.charAt(str2.length()-2))
			{
				aa2=um;
				str2=str2.substring(0, str2.length()-2);
			}
			else 
			{
				aa2=new BigDecimal("1");
				str2=str2.substring(0, str2.length()-1);
			}
			
			str3=str3.substring(0,  str3.length()-2);
			a1=new BigDecimal(str1);
			a2=new BigDecimal(str2);
			a3=new BigDecimal(str3);
			a1=a1.multiply(aa1);
			a2=a2.multiply(aa2);
			//System.out.println(a1+"   "+a2+"   "+a3+"   ");
			
			BigDecimal ans=new BigDecimal("0");
		    ans=ans.add(a3);
		    ans=ans.multiply(a1);
		    
		  //  System.out.println(ans+"   "+a2);
		    ans=ans.divide(a2,2);
		    ans=ans.setScale(2, BigDecimal.ROUND_HALF_UP);
		    tag++;
		    System.out.println("Case "+tag+": "+ans+"px");
			}	
	}
}


 

 

2014-04-19 16:21:57 iloveluo09 阅读数 500

题目:


时间限制:2000ms
单点时限:1000ms
内存限制:256MB

描述

一般来说,我们采用针孔相机模型,也就是认为它用到的是小孔成像原理。

在相机坐标系下,一般来说,我们用到的单位长度,不是“米”这样的国际单位,而是相邻像素的长度。而焦距在相机坐标系中的大小,是在图像处理领域的一个非常重要的物理量。

假设我们已经根据相机参数,得到镜头的物理焦距大小(focal length),和相机胶片的宽度(CCD width),以及照片的横向分辨率(image width),则具体

Focal length in pixels = (image width in pixels) * (focal length on earth) / (CCD width on earth)

比如说对于Canon PowerShot S100, 带入公式得

Focal length in pixels = 1600 pixels * 5.4mm / 5.27mm = 1639.49 pixels

现在,请您写一段通用的程序,来求解焦距在相机坐标系中的大小。


输入

多组测试数据。首先是一个正整数T,表示测试数据的组数。

每组测试数据占一行,分别为

镜头的物理焦距大小(focal length on earth)

相机胶片的宽度(CCD width on earth)

照片的横向分辨率大小(image width in pixels),单位为px。

之间用一个空格分隔。


输出

每组数据输出一行,格式为“Case X: Ypx”。 X为测试数据的编号,从1开始;Y为焦距在相机坐标系中的大小(focallength in pixels),保留小数点后2位有效数字,四舍五入取整。

数据范围

对于小数据:focal length on earth和CCD width on earth单位都是毫米(mm)

对于大数据:长度单位还可能为米(m), 分米(dm), 厘米(cm), 毫米(mm), 微米(um),纳米(nm)


计算公式为:

样例输入
2
5.4mm 5.27mm 1600px
5400um 0.00527m 1600px

样例输出

Case 1: 1639.47px
Case 2: 1639.47px

————————————————————————————————————分割线———————————————————————————————————————————————————————————————————————————————————————————————————————————————

自己写的代码:

#include <stdio.h>
#include <string.h>

double transfer(char *type);

int main()
{
	unsigned T, caseNum;
	scanf("%d", &T);
	caseNum = 0;

	int imgWidthInPix;
	double focalLenOnEar, CCDWidOnEar;
	double focalLenInPix = 0.0;

	char focalType[4], CCDType[4], imgType[4];

	while (++caseNum <= T)
	{
		scanf("%lf%s %lf%s %d%s", &focalLenOnEar, &focalType, &CCDWidOnEar, &CCDType, &imgWidthInPix, &imgType);

		if (strcmp(focalType, CCDType))
		{
			focalLenOnEar *= transfer(focalType);
		
			CCDWidOnEar *= transfer(CCDType);
		}
	
		focalLenInPix = focalLenOnEar / CCDWidOnEar * (double)imgWidthInPix;
		printf("Case %d: %.2lf\n", caseNum, focalLenInPix);
	}
	return 0;
}

double transfer(char *type)
{
	if (strlen(type) == 1)
	{
		return 1000.0;
	}
	else 
	{
		switch (type[0])
		{
		case 'd':
			return 100.0;
			break;
		case 'c':
			return 10.0;
			break;
		case 'm':
			return 1.0;
			break;
		case 'u':
			return 0.001;
			break;
		case 'n':
			return 0.000001;
			break;
		default:
			printf("error input\n");
			break;
		}
	}
	return 0;
}

写过程中遇到的问题:

1. 主要就是格式化输入那边。定义的变量为double型,自己一开始一直有scanf("%f")来接受输入,结果一直不对,后来才发现应该是加个l,也就是scanf("%lf"), 这样改一下就没问题了。

2. 四舍五入问题。还是

2014-04-21 09:26:15 ziyounvshenwang 阅读数 574
    
时间限制:2000ms
单点时限:1000ms
内存限制:256MB

描述

一般来说,我们采用针孔相机模型,也就是认为它用到的是小孔成像原理。

在相机坐标系下,一般来说,我们用到的单位长度,不是“米”这样的国际单位,而是相邻像素的长度。而焦距在相机坐标系中的大小,是在图像处理领域的一个非常重要的物理量。

假设我们已经根据相机参数,得到镜头的物理焦距大小(focal length),和相机胶片的宽度D width),以及照片的横向分辨率(image width),则具体计算公式为:

Focal length in pixels = (image width in pixels) * (focal length on earth) / D width on earth)

比如说对于Canon PowerShot S100, 带入公式得

Focal length in pixels = 1600 pixels * 5.4mm / 5.27mm = 1639.49 pixels

现在,请您写一段通用的程序,来求解焦距在相机坐标系中的大小。

输入

多组测试数据。首先是一个正整数T,表示测试数据的组数。

每组测试数据占一行,分别为

镜头的物理焦距大小(focal length on earth)

相机胶片的宽度D width on earth)

照片的横向分辨率大小(image width in pixels),单位为px。

之间用一个空格分隔。

输出

每组数据输出一行,格式为“Case X: Ypx”。 X为测试数据的编号,从1开始;Y为焦距在相机坐标系中的大小(focallength in pixels),保留小数点后2位有效数字,四舍五入取整。

数据范围

对于小数据:focal length on earth篋 width on earth单位都是毫米(mm)

对于大数据:长度单位还可能为米(m), 分米(dm), 厘米(cm), 毫米(mm), 微米(um),纳米(nm)



样例输入
 2 5.4mm 5.27mm 1600px 5400um 0.00527m 1600px
样例输出
 Case 1: 1639.47px Case 2: 1639.47px
这个题第一反应就是用java写,结果可能是java API不是很熟,但是到最后算是勉勉强过了!庆幸ing.....
package competatiion;
import java.math.BigDecimal;
import java.util.Scanner;

public class Main{
	
	public static void main(String[] str)
	{
		Scanner input=new Scanner(System.in);
		BigDecimal nm=new BigDecimal("0.000000001");
		BigDecimal um=new BigDecimal("0.000001");
		BigDecimal mm=new BigDecimal("0.001");
		BigDecimal cm=new BigDecimal("0.01");
		BigDecimal dm=new BigDecimal("0.1");
		String str1,str2,str3;
		int tag=0;
		int cas=input.nextInt();
		while(--cas>=0)
		{
			str1=input.next();
			str2=input.next();
			str3=input.next();
			BigDecimal a1,a2,a3,aa1,aa2;
			if('n'==str1.charAt(str1.length()-2))
			{
				aa1=nm;
				str1=str1.substring(0, str1.length()-2);
			}
			else if('u'==str1.charAt(str1.length()-2))
			{
				aa1=um;
				str1=str1.substring(0, str1.length()-2);
			}
			else if('m'==str1.charAt(str1.length()-2))
			{
				aa1=um;
				str1=str1.substring(0, str1.length()-2);
			}
			else if('c'==str1.charAt(str1.length()-2))
			{
				aa1=um;
				str1=str1.substring(0, str1.length()-2);
			}
			else if('d'==str1.charAt(str1.length()-2))
			{
				aa1=um;
				str1=str1.substring(0, str1.length()-2);
			}
			else 
			{
				aa1=new BigDecimal("1");
				str1=str1.substring(0, str1.length()-1);
			}
			
			if('n'==str2.charAt(str2.length()-2))
			{
				aa2=nm;
				str2=str2.substring(0, str2.length()-2);
			}
			else if('u'==str2.charAt(str2.length()-2))
			{
				aa2=um;
				str2=str2.substring(0, str2.length()-2);
			}
			else if('m'==str2.charAt(str2.length()-2))
			{
				aa2=um;
				str2=str2.substring(0, str2.length()-2);
			}
			else if('c'==str2.charAt(str2.length()-2))
			{
				aa2=um;
				str2=str2.substring(0, str2.length()-2);
			}
			else if('d'==str2.charAt(str2.length()-2))
			{
				aa2=um;
				str2=str2.substring(0, str2.length()-2);
			}
			else 
			{
				aa2=new BigDecimal("1");
				str2=str2.substring(0, str2.length()-1);
			}
			
			str3=str3.substring(0,  str3.length()-2);
			a1=new BigDecimal(str1);
			a2=new BigDecimal(str2);
			a3=new BigDecimal(str3);
			a1=a1.multiply(aa1);
			a2=a2.multiply(aa2);
			//System.out.println(a1+"   "+a2+"   "+a3+"   ");
			
			BigDecimal ans=new BigDecimal("0");
		    ans=ans.add(a3);
		    ans=ans.multiply(a1);
		    
		  //  System.out.println(ans+"   "+a2);
		    ans=ans.divide(a2,2);
		    ans=ans.setScale(2, BigDecimal.ROUND_HALF_UP);
		    tag++;
		    System.out.println("Case "+tag+": "+ans+"px");
			}	
	}
}




编程之美 焦距

阅读数 622

焦距

阅读数 5

没有更多推荐了,返回首页