2018.7.8 大疆图像处理工程师B卷

1.边缘检测滤波器

一阶边缘滤波器:卷积核一侧都是正另一侧都是负。

二阶边缘滤波器:中间为高,四周为-1或+1。

如果在图像中检测到边缘并对其进行定位,那么对后续的算法将起到至关重要的作用。灰度的突然变化会在一阶导数中引起波峰或者波谷,或者在二阶导数中等效的引起零交叉。

一阶微分Prewitt算子(卷积核如下):

一阶微分Bobel算子(卷积核发生了变化):

二阶微分Laplace算子:


2.快速排序,归并排序,堆排序,桶排序时间复杂度。

O(nlogn)平均复杂度都是这个。

还是得尽可能手写代码。

3.patch相似度通常使用什么方法?

Patch---图像块,类似于block块这种东西(3*3, 5*5等等)

Pixel---图像像素点

①直方图方法:

直方图就是把原来的像素点根据一定的范围进行像素点统计,比如根据这些亮度范围(0-10)(10-20)等等对像素点出现的概率进行统计。

直方图归一化就是根据像素点出现的频率,把图像中像素点出现的概率压缩到和为1的范围内。

之后再对两个直方图进行匹配就是直方图匹配算法了,这种算法效果很差,信息丢失很严重,而且没有空间信息,所以出错率也很高。

直方图主要的作用还是图像增强。

②矩阵分解的方法:

将图像patch做矩阵分解,如SVD奇异值分解和NMF肺腑矩阵分解等,之后再做相似度估计。

③基于特征点的方法

SIFT、BM等匹配算法。

④基于信噪比(PSNR)的方法。(不知道怎么用)

⑤图像模板匹配。(不知道怎么用)


4. List是C++中的容器,删,插入,随机访问时间复杂度?

List a;

删除s.delete();    O(1)

插入 O(1)

随机访问 O(n)

5.Vector是C++的容器,请给出erase,insert和push_back时间复杂度?

删除某个元素:Erase  O(n)

插入元素:insert   O(n)

尾部插入:push_back   O(n)

6.图像腐蚀膨胀原理和例子:

①腐蚀:

         对Z中的集合A和B,B对A进行腐蚀的整个过程如下: 
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为0,结果图像的该像素为0。否则为255(白)

0是黑色,所以0才是有意义的数值。

腐蚀处理的结果是使原来的二值图像减小一圈。

如果是灰度图,则取核函数覆盖范围内最大值作为新的核函数中心值(向中间缩一圈)。

②膨胀:

对Z中的集合A和B,B对A进行膨胀的整个过程如下: 
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“或”操作
⑶ 如果有一个为0,结果图像的该像素为0。否则为255(白)

0是黑色,所以0才是有意义的数值。

膨胀处理的结果是使原来的二值图像扩大一圈。

如果是灰度图,则取核函数覆盖范围内最小值作为新的核函数中心值(向中间缩一圈)。

7.双线性插值图像旋转:

之前使用过CUDA在CPU和GPU下为图像缩放实现过双线性插值,不过没有涉及到旋转。

双线性插值的原理:

四个Q点是源图像上连在一起的四个点,P是缩放后的图像,在源图像上对应的点的坐标。先在X方向上做插值得到x,然后再在Y的方向上做插值得到y。以四个点的距离作为权值,计算出合适的P点的值。



使用双线性插值旋转,其实就是先根据要求缩放,之后再进行旋转:



猜你喜欢

转载自blog.csdn.net/Zlase/article/details/80970210