matlab练习程序(弧形、圆柱投影的复原)

前一段介绍了从矩形图像到圆柱的正向投影,看这里这里。今天介绍如何从已经投影的图像反映射到原图像上。

本来此种变换一定是需要数学公式的,不过这里只是用了一个很简单的方式来完成反映射。

具体就把每一列有像素数据的长度拉伸到原图像的高就行了。

原图像是这样:

处理后:

看着感觉还可以,不过这样显然是不合数学公式的,和最原始的图比较一下就看出来差别了:

matlab代码如下:

clear all;close all;clc;

img=imread('re.bmp');
[h w]=size(img);
imshow(img);

for x=1:w
    p=[];
    for y=1:h
        if img(y,x)~=0
            p=[img(y,x) p];
        end
    end
   
    s=imresize(p,[1,h]);
    img(:,x)=s;
   
end

newh=256;
neww=256;
imgn=imresize(img,[newh,neww]);

figure;
imshow(flipud(imgn),[]);

家里的键盘真的很不适合打字。

转载于:https://www.cnblogs.com/tiandsp/p/3851977.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个MATLAB程序,用于计算圆柱体在透视投影下的图像: ```matlab % 定义圆柱体参数 r = 1; % 圆柱半径 h = 2; % 圆柱高度 % 定义视点参数 camera_pos = [0, 0, -5]; % 相机位置 camera_target = [0, 0, 0]; % 相机朝向 % 生成圆柱体上的点 theta = linspace(0, 2*pi, 100); % 角度范围 x = r * cos(theta); % 圆柱体上的x坐标 y = r * sin(theta); % 圆柱体上的y坐标 z = linspace(0, h, 100); % 圆柱体上的z坐标 [X, Y, Z] = meshgrid(x, y, z); % 生成网格点 % 投影点到相机平面上 camera_dir = camera_target - camera_pos; % 相机方向向量 camera_dir = camera_dir / norm(camera_dir); % 相机方向向量归一化 plane_normal = camera_dir; % 投影平面法向量与相机方向相同 plane_point = camera_pos; % 投影平面上的一点为相机位置 P = plane_project([X(:), Y(:), Z(:)], plane_point, plane_normal); % 投影到相机平面上 % 绘制圆柱体的投影 figure scatter(P(:, 1), P(:, 2), '.', 'MarkerEdgeColor', 'k') axis equal axis off function P = plane_project(Q, P0, n) % 投影点到平面上 % Q: 待投影的点集,每行为一个点的坐标 % P0: 投影平面上的一点 % n: 投影平面的法向量,必须为一个归一化向量 % P: 投影后的点集,每行为一个点的坐标 Q = Q - repmat(P0, size(Q, 1), 1); % 将平面上的一点移动到原点 d = sum(Q .* repmat(n, size(Q, 1), 1), 2); % 计算点到平面的距离 P = Q - repmat(d, 1, 3) .* repmat(n, size(Q, 1), 1); % 投影到平面上 end ``` 该程序中使用了一个自定义函数 `plane_project`,用于将点集投影到平面上。该函数的实现如下: ```matlab function P = plane_project(Q, P0, n) % 投影点到平面上 % Q: 待投影的点集,每行为一个点的坐标 % P0: 投影平面上的一点 % n: 投影平面的法向量,必须为一个归一化向量 % P: 投影后的点集,每行为一个点的坐标 Q = Q - repmat(P0, size(Q, 1), 1); % 将平面上的一点移动到原点 d = sum(Q .* repmat(n, size(Q, 1), 1), 2); % 计算点到平面的距离 P = Q - repmat(d, 1, 3) .* repmat(n, size(Q, 1), 1); % 投影到平面上 end ``` 该函数的输入参数为待投影的点集 `Q`,投影平面上的一点 `P0`,以及投影平面的法向量 `n`。函数首先将投影平面上的一点移动到原点,然后计算每个点到投影平面的距离,并将点投影到平面上。最后,函数返回投影后的点集 `P`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值