度量变换+图像拼接+检测深度图【国科大图像处理实验】


实验一

问题描述:目录hw1下的图像是一些胶片的照片,请将其进行度量矫正。

具体实现

采用Canny算子,检测边缘点,参数的设置不能太大也不能太小,这个很关键;

# 读取图像
image=r'./hw1/4.jpeg'
img = cv.imread(image)

# 灰度化处理图像
grayImage = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 高斯滤波降噪
gaussian = cv.GaussianBlur(grayImage, (11, 11), 0) 
# Canny算子
Canny = cv.Canny(gaussian, 80, 120)

采用Hough直线检测,根据边缘点检测胶片边缘对应的4条直线,有时会有多余的直线存在,所以在计算交点时要进行筛选;

# hough_p:
lines_p = cv.HoughLinesP(Canny, rho = 10, theta = np.pi/180, threshold = 150, minLineLength= 250, maxLineGap=10)

for i in range(len(lines_p)):
    x_1, y_1, x_2, y_2 = lines_p[i][0]
    cv.line(img_p, (x_1, y_1), (x_2, y_2), (0, 255, 0), 2)
print("code successful!")

由4条直线在图像平面中的交点为胶片图像的4个 顶点;

for x1, y1, x2, y2 in lines[:]:
    for x3,y3,x4,y4 in lines[:]:
        point_is_exist, [x, y]=cross_point([x1, y1, x2, y2],[x3,y3,x4,y4])
        if point_is_exist and (int(y) > 150) and (int(x) < 3000):    #剔除多余点!
            list_image.append((int(x),int(y)))
            cv.circle(img_p2,(int(x),int(y)),5,(0,0,255),3)

根据4个 顶点与真实世界中胶片的位置得到两个平面之间的单应变换矩阵;并根据单应变换矩阵实现图像矫正

dst_point = np.array([[dsize[0]-1,0],[0,0],[0,dsize[1]-1],[dsize[0]-1,dsize[1]-1]])
h, s = cv.findHomography(src_point, dst_point, cv.RANSAC, 10)   
img = cv.warpPerspective(img_p2, h, dsize)
img = cv.cvtColor(img, cv.COLOR_RGB2BGR)

注:由于每张图都不一样,canny的参数以及Hough直线检测的参数会有一定程度影响实验结果,为了得到更好的实验结果分别对每张图片进行了调参。

实验结果

原图像:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

处理后图像:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


实验二

问题描述:目录hw2下有两幅学校的照片,请根据课程中讲述图像拼接方法,将这两幅图像拼接成一幅大的图像。

具体实现

1.对每幅图做特征提取,根据提取到的特征点对两幅图做特征匹配。
2.图像配准及误匹配点的去除,即根据匹配的特征点找出重叠部分的对应坐标,并求出对应坐标转换的矩阵homography。
3.根据转换矩阵将右图拷贝到左图的指定位置上。
4.对重叠的边界做特殊处理,如平滑处理、去裂缝处理、过渡等。

实验结果

原图像:
在这里插入图片描述在这里插入图片描述

处理后图像:
在这里插入图片描述


实验三

问题描述:目录hw3下有立体视觉对应的两幅图像view1.png和view5.png,图像来源于http://vision.middlebury.edu/stereo/data/。请计算出这两幅图像对应场景的深度。。

具体实现

极线校正:校正的目的是使两帧图像极线处于水平方向,或者说是使两帧图像的光心处于同一水平线上。

  1. 由标定得到的内参中畸变信息中可以对图像去除畸变
  2. 通过校正函数校正以后得到相机的矫正变换R和新的投影矩阵P,接下来是要对左右视图进行去畸变,并得到重映射矩阵。
  3. 根据上述得到的重映射参数map1,map2,我们需要进一步对原始图像进行重映射到新的平面中才能去除图像畸变。

特征匹配:这里便是我们利用NCC做匹配的步骤啦,匹配方法如上所述,右视图中与左视图待测像素同一水平线上相关性最高的即为最优匹配。完成匹配后,我们需要记录其视差d,即待测像素水平方向xl与匹配像素水平方向xr之间的差值d = xr - xl,最终我们可以得到一个与原始图像尺寸相同的视差图D。

深度恢复:通过上述匹配结果得到的视差图D,我们可以很简单的利用相似三角形反推出以左视图为参考系的深度图。

实验结果

原图像:
在这里插入图片描述在这里插入图片描述

得到的深度图:在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值