您现在的位置:首页 >> 三维重建 >> 内容

基于visual-hull算法的图像三维重建matlab仿真

时间:2023/3/6 23:18:34 点击:

  核心提示:A457,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJaUl5xu

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览



3.算法概述

        visual hull用于简单、快速地获取三维模型。目前,获取三维模型的方式有,利用传统几何构造技术直接构造模型.利用三维扫描设备对真实物体进行扫描,进而重建出模型.利用从各个视角拍摄的真实物体的多幅图像重建模型.由图像重建三维模型技术又可分为两类:一类是通过多幅深度图像重建模型,另一类是通过多幅照片生成物体的可见外壳visual hull.

4.部分源码

...............................................................

object_points3D = [voxels(:,1)'; voxels(:,2)'; voxels(:,3)'; ones(1, length(voxels))];

voxels(:, 4) = zeros(size(voxels(:, 4)));

voxel_inds = {};

img_vals = {};

dmin = depth_range(1);

dmax = depth_range(2);

img_size = size(silhouettes);

for i = 1:size(M,3)

    r = M(1:3, 1:3, i);

    t = M(1:3, 4, i);    

    if t == [0;0;0]

        continue;

    end

    

    center = [-(r')* t; 1]; 

 

    cam_center = repmat(center, 1, size(object_points3D,2));

  

    KM = [K]*M(1:3, 1:4, i);

  

    points2D = KM*object_points3D;

    points2D = points2D./[points2D(3,:); points2D(3,:); points2D(3,:)];

    

    cur_silhouette = silhouettes(:,:,i);

 

    pixThresh = mean(cur_silhouette(:)) + std(cur_silhouette(:));

    cur_mask = cur_silhouette > pixThresh;

    saliencyFlag = zeros(1,size(points2D,2),'logical');

    for ii = 1:size(points2D,2)

        if points2D(2,ii) > 1 && points2D(2,ii) < img_size(1) && ...

           points2D(1,ii) > 1 && points2D(1,ii) < img_size(2)

            saliencyFlag(ii) = cur_mask(round(points2D(2,ii)),round(points2D(1,ii)));

        end

    end

 

    saliencyFlag = ones(1,size(points2D,2),'logical');

    

    d = sqrt(sum((cam_center - object_points3D).^2, 1));

    pts_ind = find(... %d > dmin & d < dmax ...

        points2D(2,:) > 1 & points2D(2,:) < img_size(1) ...

        & points2D(1,:) > 1 & points2D(1,:) < img_size(2) ...

        & saliencyFlag);

 

     pi = points2D(1,pts_ind);

     pj = points2D(2,pts_ind);

    

    

    [img_val, ind, object_points_cam] = GetSilhouetVals([pi;pj],  cur_silhouette);

    

    ind = pts_ind(ind);

 

    voxel_inds{i} = ind;

    img_vals{i} = img_val;

 

    if(display_projected_voxels)

        figure(fid), 

        imagesc(cur_silhouette);title(i);hold on

        plot(object_points_cam(1,:), object_points_cam(2,:), '.g');hold off

        

    end

end

 

cumulCount = zeros(size(voxels,1),1);

 

for i=1:size(voxel_inds,2)

    ind = voxel_inds{i};

    img_val = img_vals{i};

    voxels(ind, 4) = voxels(ind, 4) + img_val;

    cumulCount(ind) = cumulCount(ind) + 1;

end

 

end

 

function [img_val, ind, object_points_cam] = GetSilhouetVals(points2D, silhouette)

    img_size = size(silhouette);    

    

    pi = floor(points2D(1,:));

    pj = floor(points2D(2,:));

    a = (points2D(1,:) - pi)';

    b = (points2D(2,:) - pj)';

    

    object_points_cam = floor([points2D(1,:); points2D(2,:)]); 

   

    ind_bad = [];

 

    ind_img = int32(sub2ind(img_size(1:2), object_points_cam(2,:)', object_points_cam(1,:)'));

    ind_img(ind_bad) = [];

    img_val = silhouette(uint32(ind_img));

    

    ind_img2 = int32(sub2ind(img_size(1:2), object_points_cam(2,:)'+1, object_points_cam(1,:)'));

    ind_img2(ind_bad) = [];

    img_val2 = silhouette(uint32(ind_img2));

    

    ind_img3 = int32(sub2ind(img_size(1:2), object_points_cam(2,:)', object_points_cam(1,:)'+1));

    ind_img3(ind_bad) = [];

    img_val3 = silhouette(uint32(ind_img3));

    

    ind_img4 = int32(sub2ind(img_size(1:2), object_points_cam(2,:)'+1, object_points_cam(1,:)'+1));

    ind_img4(ind_bad) = [];

    img_val4 = silhouette(uint32(ind_img4));

%     

    ind = 1:size(object_points_cam, 2);

    ind(ind_bad) = [];

    img_val = (1-a(ind)).*(1-b(ind)).*img_val+...

                (a(ind)).*(1-b(ind)).*img_val3+...

                (1-a(ind)).*(b(ind)).*img_val2+...

                (a(ind)).*(b(ind)).*img_val4;

end

A457

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168