国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分

這篇具有很好參考價值的文章主要介紹了A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分


A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

代碼介紹原文:

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

1.代碼結(jié)構(gòu)

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

1.1 data數(shù)據(jù)

  • net

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

在這里插入圖片描述A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

2. scripts_preset.m 代碼

2.1 代碼整體介紹

這段代碼的作用是加載PSFs數(shù)據(jù),并進行一系列參數(shù)設(shè)置。

  • 首先,通過設(shè)置data_dir變量為數(shù)據(jù)目錄的路徑。然后,根據(jù)場景名來選擇特定于場景的參數(shù)。根據(jù)不同的場景名,設(shè)置d1d2的值。

  • net 場景包括一個距離相機約30mm的網(wǎng)狀物和一個距離網(wǎng)狀物后方約100mm的橡皮鴨。

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

%% 加載 psfs 數(shù)據(jù)
data_dir = '../data';  % 設(shè)置數(shù)據(jù)目錄

scene_name = 'net';  % 設(shè)置場景名稱

% -- SCENE
% 選擇特定于場景的參數(shù)
switch scene_name
    % 若場景名為“toys”(玩具),設(shè)置d1為80,d2為600
    case 'toys'
        d1 = 80; d2 = 600;

    % 若場景名為“two_cards”(兩張卡片),設(shè)置d1為35,d2為200
    case 'two_cards'
        d1 = 35; d2 = 200;

    % 若場景名為“net”(網(wǎng)),設(shè)置d1為20,d2為300
    case 'net'
        d1 = 20; d2 = 300;

    % 若場景名為“carrot”(蘿卜),設(shè)置d1為15,d2為300
    case 'carrot'
        d1 = 15; d2 = 300;
end
  • 設(shè)置masktype變量來選擇掩膜類型,可選的類型有"random"(隨機)、“mls”(最小二乘)、“opt”(優(yōu)化)和"shiftXY"(XY移位)。根據(jù)選擇的掩膜類型不同,代碼會設(shè)置不同的掩膜序列。

  • 設(shè)置nmaskndepth的值,分別表示掩膜數(shù)量和深度數(shù)量。

    % -- MASKTYPE
    % 設(shè)置掩膜類型,可選項有 "random"(隨機)、"mls"(最少二乘)、"opt"(優(yōu)化) 和 "shiftXY"(XY移位)
    % masktype = 'random'
    % masktype = 'mls'
    masktype = 'opt'
    % masktype = 'shiftXY'
    
    % -- NUM OF MASKS AND DEPTHS
    % 設(shè)置掩膜數(shù)量為8,深度數(shù)量也為8
    nmask = 8;
    ndepth = 8;
    
  • 接下來,設(shè)置recon_method變量來選擇重建方法,可選的方法有"adap_l2"(自適應(yīng)L2)和"t_svd"(基于是否有GPU設(shè)備設(shè)置為張量奇異值分解)。

  • 如果沒有檢測到GPU設(shè)備,則將重建方法設(shè)置為"t_svd"

    % -- METHOD
    % 設(shè)置重建方法為 'adap_l2'(自適應(yīng)L2),或者基于是否有GPU設(shè)備設(shè)置為 't_svd'(張量奇異值分解)
    recon_method = 'adap_l2'
    % recon_method = 't_svd'
    
    % 如果沒有檢測到GPU設(shè)備,則將重建方法設(shè)置為't_svd'
    if gpuDeviceCount < 1
        recon_method = 't_svd';
    end
    
  • 加載文件

    % 根據(jù)設(shè)置的數(shù)據(jù)目錄加載PSFs數(shù)據(jù)文件
    load(sprintf('%s/psfs-fullsize-cg-bin8.mat', data_dir));
    disp(dists)
    
    • 字典內(nèi)包含三部分

      A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

      • dists

        A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

      • mask_names

        A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

      • psfs

        A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

  • 相機參數(shù)設(shè)置

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    % 相機參數(shù)預(yù)設(shè)
    Ho = 3648 / 2;  %圖像的高度
    Wo = 5472 / 2;  %圖像的寬度
    mask_depth = 10.51; %掩膜距離傳感器的距離
    bin_size = 8; 
    cam_pitch = 2.4 * 1e-3; %相機的像素距離,以毫米為單位
    cam_chnl_pitch = cam_pitch * 2 * bin_size; %是通道間的距離,通過將相機像素間距乘以2和二進制大小來計算。
    
    d = mask_depth;
    z2a = @(z) 1-d./z;  % 深度到a的轉(zhuǎn)換函數(shù)
    a2z = @(a) d./(1-a);  % a到深度的轉(zhuǎn)換函數(shù)
    
    % 計算深度范圍
    depth_range = a2z(linspace(z2a(d1), z2a(d2), ndepth));
    
  • 根據(jù)選擇的掩膜類型,選擇原始測量數(shù)據(jù)和PSFs(點擴散函數(shù))進行恢復(fù)。

    %% 選擇原始測量數(shù)據(jù)和PSFs進行恢復(fù)
    
    % 根據(jù)掩膜類型選擇隨機二值掩膜
    switch masktype
        % 如果掩膜類型為'random',選擇序列中的第6至第25個掩膜
        case 'random'
            mask_seq = 6:25;
            ind1 = mask_seq(1:nmask);
            ind2 = mask_seq(nmask+1)*ones(length(ind1),1);
    
        % 如果掩膜類型為'mls',選擇序列中的第47至第66個掩膜
        case 'mls'
            mask_seq = 47:66;
            ind1 = 47:2:47+nmask*2-1;
            ind2 = 48:2:47+nmask*2-1;
    
        % 如果掩膜類型為'opt',選擇序列中的第27至第46個掩膜
        case 'opt'
            mask_seq =27:46;
            ind1 = 27:2:27+nmask*2-1;
            ind2 = 28:2:27+nmask*2-1;
    
        % 如果掩膜類型為'shiftXY',選擇序列中的第67至第102個掩膜
        case 'shiftXY'
            mask_seq = 67:102;
            ind1 = 67:2:67+nmask*2-1;
            ind2 = 68:2:67+nmask*2-1;
    end
    

3 demo_block_diagonal.m 代碼

3.1 代碼介紹

  • 參數(shù)初始化

    %定義一個函數(shù),該函數(shù)接受一個圖像數(shù)組和圖像名稱,將其轉(zhuǎn)化為RGB格式并播放
    %H×W×C×N ===> H×W×N×C
    play_rggb_stack = @(im, names)play_stack(rggb2rgb(permute(im, [1 3 4 2])), names);
    % 定義一個函數(shù),用于顯示歸一化的圖像
    imshowsm = @(im)imshow(mat2gray(squeeze(im)));
    % 定義一個函數(shù),用于找到最大值并規(guī)范化
    max1 = @(x) x/max(abs(x(:)));
    
    run('scripts_preset');
    
    %設(shè)置實驗ID
    expid = 1;
    
    %%
    % 初始化圖像大小和點擴散函數(shù)(PSF)大小
    ims_size = [228, 342];
    psf_size = [228, 342];
    
    % 獲取掩膜數(shù)量
    nmask = length(ind2);
    
    % 初始化存儲圖像序列和點擴散函數(shù)校準序列的數(shù)組
    ims_stack = zeros([nmask, 4, ims_size]);
    psf_calib_stack = zeros([nmask,length(dists), 4, psf_size]);
    mask_stack = zeros(nmask, 769, 1024);
    
    % 定義一個函數(shù),用于將數(shù)組填充到最大尺寸
    padmax = @(x) padarray(x, (psf_size - size(x))/2, 0, 'both');
    
  • 讀取數(shù)據(jù)

    • 為什么要存儲掩膜數(shù)據(jù)的差值?

      GPT:

      ? 存儲差值的目的是為了在后續(xù)的重建過程中,使用這些差值來恢復(fù)被遮擋的信息。差值代表了兩個不同掩膜之間的區(qū)別,這 些差值可以用于去除遮擋區(qū)域或恢復(fù)遮擋區(qū)域的信息。

      ? 通過存儲差值,可以在后續(xù)的重建過程中利用它們來改善圖像重建的質(zhì)量和準確性。

    • data_dir = ‘…/data’

      scene_name = ‘net’

    • mask_seq =27:46;
      ind1 = 27:2:27+nmask2-1;
      ind2 = 28:2:27+nmask
      2-1;

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    % 循環(huán)讀取不同掩膜的圖像和PSF校準數(shù)據(jù)
    for ii = 1:nmask
         % 讀取圖像數(shù)據(jù)
        im2 = im2double(imread(sprintf('%s/%s/%s.png',data_dir, scene_name, mask_names{ind2(ii)})));
        im1 = im2double(imread(sprintf('%s/%s/%s.png',data_dir, scene_name, mask_names{ind1(ii)})));
         % 讀取掩膜數(shù)據(jù)并存儲差值
        mask1 = im2double(imread(sprintf('%s/masks/%s.png',data_dir, mask_names{ind1(ii)})));
        mask2 = im2double(imread(sprintf('%s/masks/%s.png',data_dir, mask_names{ind2(ii)})));    
        mask_stack(ii, :,:) = mask1 - mask2;
    
         % 對圖像數(shù)據(jù)進行去馬賽克,并對像素進行合并
        im_rggb = debayer(im1 - im2);
            % (height, width, channels) 重排列為 (channels, height, width),然后均值池化
        im_rggb = bin_pixels( reshape(permute(im_rggb, [3 1 2]), [1, 4, Ho, Wo]), bin_size); 
        ims_stack(ii,:,:,:) = im_rggb;
    
         % 循環(huán)不同的景深處理點擴散函數(shù)(PSF)
        for use_d = 1:5
            psf = padmax(psfs{ind1(ii), use_d}) - padmax(psfs{ind2(ii), use_d});
            psf = repmat(reshape(psf, 1, 1, psf_size(1), psf_size(2)), 1, 4, 1, 1);
            psf_calib_stack(ii,use_d,:,:,:) = psf;
        end
        
        fprintf('\n read in data for mask %02d', ii);
    end
    

    **附:**bin_pixels函數(shù),這個函數(shù)是一個用于將圖像進行均值池化的函數(shù)。

    ? 輸入?yún)?shù):

    • im: 輸入圖像,維度為(N, C, H, W),其中N為圖像的數(shù)量,C為圖像的通道數(shù),H為圖像的高度,W為圖像的寬度。
    • bin_size: 池化操作的窗口大小。
    function out = bin_pixels(im, bin_size)
    %im: (N, C, H, W)
    %bin_size:int
    kernel = ones(bin_size); 
    kernel = kernel / sum(kernel(:));
    half_bin = round(bin_size/2);
    ys = 1:bin_size:(size(im,3)-bin_size+1);
    xs = 1:bin_size:(size(im,4)-bin_size+1);
    out = zeros(size(im,1), size(im,2), length(ys), length(xs));
    for i = 1:size(im,1), for j = 1:size(im,2),
        tmp = conv2(squeeze(im(i,j,:,:)), kernel, 'valid');
        out(i,j,:,:) = tmp(ys, xs);
    end; end
    end
    
  • 計算每個掩膜對應(yīng)的多深度PSF,創(chuàng)建PSF和圖像的FFT堆棧

    % 設(shè)置深度范圍
    im_z = depth_range;
    
    ndepth = length(im_z);
    zs = im_z; % 坐標轉(zhuǎn)換
    cam_size = size(ims_stack); cam_size = cam_size(3:end); 
    C = size(ims_stack,2);
    
    %初始化PSF堆棧
    psf_stack = zeros([nmask, ndepth, 4, psf_size]);
    % 循環(huán)計算每個掩膜對應(yīng)的多深度PSF
    for ii = 1:nmask
        for d = 1:ndepth
            z = zs(d);
            z_ind = 2;
            % Compute beta, psf at z, by interpolating from nearest captured.
            % 通過插值計算z處的PSF
            beta = zeros([C psf_size]);
            %         scale_fun = @(z, z0)((z0-mask_depth) * z)/((z-mask_depth) * z0); %d in mm
            scale_fun = @(z, z0)(z0 * (z + mask_depth)) / (z * (z0 + mask_depth)); % 深度以毫米為單位
            a1_over_a0 = scale_fun(z, dists(z_ind));
            % direct interp for right size直接插值到正確的尺寸
            [x, y] = meshgrid(linspace(-.5, .5, psf_size(2)), linspace(-.5, .5, psf_size(1)));
            for c = 1:C
                alpha = anti_alias(squeeze(psf_calib_stack(ii,z_ind , c, :, :)), a1_over_a0);
                beta(c, :, :) = interp2(x, y, alpha, ...
                    x / a1_over_a0, y / a1_over_a0, ...
                    'linear', 0);
            end
            psf_stack(ii, d, :,:,:) = beta;
        end
    end
    
    %% create fft stacks of PSF and ims%% 創(chuàng)建PSF和圖像的FFT堆棧
    
    full_size = ims_size + psf_size - 1; % 定義完整尺寸
    psf_fft_stack = zeros([nmask, ndepth, 4, full_size]); % 初始化PSF的FFT堆棧
    ims_fft_stack = zeros([nmask, 4, full_size]); % 初始化圖像的FFT堆棧
    
    
  • 傅里葉變換

    for ii = 1:nmask
        for di = 1:ndepth
            for c = 1:C
                % 對PSF和圖像進行FFT變換
                psf_fft_stack(ii, di, c, :,:) = fft2(squeeze(psf_stack(ii, di, c, :,:)), full_size(1),full_size(2));
                ims_fft_stack(ii,c,:,:) = fft2( pad_and_center(squeeze(ims_stack(ii, c, :,:)), full_size), full_size(1), full_size(2));
            end
        end
    end
    
  • 重建

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab
    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab
    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    計算了正則化項 lambda_mat,然后將其添加到 AtA_gpu 中。正則項的計算是通過將最大的特征值乘以0.05來實現(xiàn)的。這樣,代碼實現(xiàn)了在最小二乘問題中添加正則項的功能。

     lambda_mat = repmat(eye(ndepth),[1,1, size(Ac_piece, 3) ]) .* reshape( max(reshape(squeeze(sqrt(sum(sum(abs(AtA_gpu).^2,1),2))), [], 1) * 0.05,200)  ,1,1,size(Ac_piece,3)) ;
                AtA_gpu = AtA_gpu + lambda_mat;
    
    for c = 1:C
        Ac = squeeze(psf_fft_stack(:,:,c,:,:)); % 提取c通道的PSF FFT
        bc = ims_fft_stack(:,c,:,:); % 提取c通道的圖像FFT
        
        switch recon_method % 根據(jù)重建方法進行選擇
            case 'adap_l2' % reconstruction with GPU
                npiece = 35;
                % 將數(shù)據(jù)劃分為多個塊以適應(yīng)GPU運算
                Ac_piece = reshape(Ac, nmask, ndepth, [], npiece);
                bc_piece = reshape(bc, nmask, 1 , [], npiece);
                xhat_fft_gpu = zeros(ndepth, 1, size(Ac_piece,3), npiece);
                
                for pp = 1:npiece
                 % 將數(shù)據(jù)移至GPU進行計算
                % move Ac and bc onto gpu 
                Ac_gpu = gpuArray(Ac_piece(:,:,:,pp));
                bc_gpu = gpuArray(bc_piece(:,:,:,pp));
             
                % L2 regularization based on frobenius norm of AtA基于AtA的Frobenius范數(shù)的L2正則化
                AtA_gpu = pagefun( @mtimes,  pagefun(@ctranspose, Ac_gpu), Ac_gpu);
                %lambda_mat = repmat(eye(ndepth),[1,1, size(Ac_piece, 3) ]) .* reshape( max(vec(squeeze(sqrt(sum(sum(abs(AtA_gpu).^2,1),2)))) * 0.05,200)  ,1,1,size(Ac_piece,3)) ;
    
                lambda_mat = repmat(eye(ndepth),[1,1, size(Ac_piece, 3) ]) .* reshape( max(reshape(squeeze(sqrt(sum(sum(abs(AtA_gpu).^2,1),2))), [], 1) * 0.05,200)  ,1,1,size(Ac_piece,3)) ;
                AtA_gpu = AtA_gpu + lambda_mat;
                clear lambda_mat
    
                %計算重建的FFT
                xhat_fft_gpu(:,:,:,pp) = gather(pagefun(@mtimes, pagefun(@mldivide, ...
                    AtA_gpu, ...
                    pagefun(@ctranspose, Ac_gpu)), bc_gpu));
                end
                xhat_fft_gpu = reshape(xhat_fft_gpu, ndepth, 1, []);      
                xhat_FFT_stack = permute(gather(reshape(xhat_fft_gpu,ndepth, full_size(1),full_size(2))),[2,3,1]);
    
                %通過IFFT換回空間域并取實部
                xhat_full(:,:,c,:) = real(ifft2(xhat_FFT_stack));
            
            case 't_svd' % reconstruction without GPU
                (省略)
        end
        fprintf('\n%02d/%02d color channels completed', c, C);
    end
    
  • 其他處理

    % 將RGGB轉(zhuǎn)換為RGB格式
    xhat_full_rgb = rggb2rgb(permute(xhat_full,[4,1,2,3]));
    
    %% rotate/shift
    % 創(chuàng)建保存文件夾
    % 根據(jù)實驗ID、掩碼類型和深度索引創(chuàng)建一個保存文件夾路徑
    save_folder = fullfile('../results',sprintf('%03d',expid),sprintf('masktype_%s',masktype),sprintf('bd_nd%02d_nm%02d',ndepth,length(ind2)));
    % 如果文件夾不存在,則創(chuàng)建該文件夾
    if ~exist(save_folder,'dir')
        mkdir(save_folder);
    end
    
    % 圖像預(yù)處理
    % 將xhat_full_rgb轉(zhuǎn)換為灰度圖像格式
    xhat_full_rgb = mat2gray(xhat_full_rgb);
    % 初始化一個新的圖像數(shù)組xhat_rgb
    xhat_rgb = zeros([ ndepth ,cam_size, 3 ]);
    
    % 旋轉(zhuǎn)/移位圖像
    % 對于每個深度層,將圖像旋轉(zhuǎn)180度并根據(jù)點擴散函數(shù)尺寸進行移位裁剪
    for di = 1:ndepth
        xhat_tmp = squeeze(xhat_full_rgb(di,:,:,:));
        xhat_tmp = circshift(rot90(xhat_tmp,2), -(psf_size-1));
        xhat_tmp = xhat_tmp(1:cam_size(1), 1:cam_size(2),:);
        xhat_rgb(di, :,:,:) = xhat_tmp;
    end
    % % 將處理后的RGB圖像再次轉(zhuǎn)換為灰度圖像格式
    xhat_rgb = mat2gray(xhat_rgb);
    
  • 去噪

    %% BM3D denoising
    % tic;
    % xhat_rgb_denoised = zeros(size(xhat_rgb));
    % for di = 1:ndepth
    %     for ci = 1:3
    %         xhat_rgb_denoised(di,:,:,ci) = BM3D(squeeze(xhat_rgb(di,:,:,ci)),0.035);
    %     end
    %     fprintf('\n depth %02d/%02d is denoised', di, ndepth);
    % end
    % xhat_rgb = xhat_rgb_denoised;
    % t_bm3d = toc;
    
    
    %% TV-L1 denoising (optional denoising method)
    tic;
    xhat_rgb_denoised = zeros(size(xhat_rgb));
    for di = 1:ndepth
        for ci = 1:3
            xhat_rgb_denoised(di,:,:,ci) = TVL1denoise(squeeze(xhat_rgb(di,:,:,ci)),1.3,100);
        end
        fprintf('\n depth %02d/%02d is denoised', di, ndepth);
    end
    xhat_rgb = xhat_rgb_denoised;
    t_tvl1 = toc;
    
  • 其他操作

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    %% crop images
    % 裁剪圖像
    % 對圖像進行裁剪,只保留感興趣的區(qū)域
    xhat_rgb_crop = permute((xhat_rgb(:,40:187,36:309,:)),[2,3,4,1]);
    % 創(chuàng)建存儲裁剪后原始結(jié)果的文件夾
    save_folder1 = fullfile(save_folder,'raw_results');
    if ~exist(save_folder1, 'dir')
        mkdir(save_folder1);
    end
    % 將裁剪后的圖像保存為圖像文件并創(chuàng)建動畫gif文件
    for di = 1:ndepth
        xhat_rgb_crop(:,:,:,di) = (xhat_rgb_crop(:,:,:,di));
        imagesc(xhat_rgb_crop(:,:,:,di)); axis image off; % title(sprintf('%3.5g mm', depth_range(di)));
        export_fig(fullfile(save_folder1,sprintf('final_result_scene_%s_depth_%02d',scene_name,di)));
        frame = export_fig;
        ims{di} = frame;
    end
    
    filename = fullfile(save_folder1,sprintf('anime_result_scene_%s.gif',scene_name)); % Specify the output file name
    for idx = 1:ndepth
        [A,map] = rgb2ind(ims{idx},256);
        if idx == 1
            imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1*(8/ndepth));
        else
            imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1*(8/ndepth));
        end
    end
    

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab
    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab
    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab
    A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

    % 調(diào)整對比度以便輸出
    % 創(chuàng)建存儲調(diào)整對比度后的結(jié)果的文件夾
    %% adjust contrast for exporting
    save_folder2 = fullfile(save_folder,'color_adjusted_results');
    if ~exist(save_folder2, 'dir')
        mkdir(save_folder2);
    end
    % 設(shè)置對比度調(diào)整后處理參數(shù)
    % color adjustment post-processing parameter
    if strcmp(recon_method,'adap_l2')
        r = 0.005;
    else
        r = 0.001;
    end
    % 調(diào)整圖像對比度并保存為圖像文件
    xhat_tmp = permute(xhat_rgb_crop, [1,2,4,3]);
    xhat_tmp_size = size(xhat_tmp);
    xhat_tmp_vec = reshape(xhat_tmp, [],1,3);
    xhat_tmp_adjust = imadjust(xhat_tmp_vec, stretchlim(xhat_tmp_vec, [r,1-r]),[]);
    xhat_adjust = permute(reshape(xhat_tmp_adjust, xhat_tmp_size),[1,2,4,3]);
    ims = {};
    for di = 1:ndepth
        imagesc(xhat_adjust(:,:,:,di)); axis image off; 
        export_fig(fullfile(save_folder2,sprintf('blockDiagonal_scene_%s_depth_%02d',scene_name,di)));
        frame = export_fig;
        ims{di} = frame;
    end
    
    filename = fullfile(save_folder2,sprintf('anime_result_scene_%s_adjusted.gif',scene_name)); % Specify the output file name
    
    for idx = 1:ndepth
        [A,map] = rgb2ind(ims{idx},256);
        if idx == 1
            imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1*(8/ndepth));
        else
            imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1*(8/ndepth));
        end
    end
    % 保存所有處理后的數(shù)據(jù)
    % 將所有相關(guān)的變量和處理后的圖像數(shù)據(jù)保存到.mat文件中
    %% save all the processed data
    %xhat_full_rgb: 完整的RGB圖像數(shù)據(jù)
    %xhat_rgb: RGB圖像數(shù)據(jù)
    %xhat_rgb_crop: 裁剪后的RGB圖像數(shù)據(jù)
    %xhat_adjust: 調(diào)整后的RGB圖像數(shù)據(jù)
    %depth_range: 深度范圍
    %scene_name: 場景名稱
    %masktype: 掩模類型
    save(fullfile(save_folder,sprintf('results_data_%s.mat', scene_name ) ),'xhat_full_rgb','xhat_rgb','xhat_rgb_crop','xhat_adjust','depth_range','scene_name','masktype');
    

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab
A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab
A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab
A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab
A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab
A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab

4 generate_all_in_focus_rggb函數(shù) 生成全在焦圖

%清除變量和關(guān)閉所有打開的圖像界面
clear; close all;

%將當(dāng)前工作目錄添加到路徑中
addpath(genpath(pwd));
run('demo_block_diagonal');
% 定義圖像處理參數(shù)
fstack_params = [];
fstack_params.filtersize = 5; % 濾波器大小
fstack_params.logstd = 2 ; % 標準差
fstack_params.dilatesize = 13; % 膨脹大小
fstack_params.blendsize = 13; % 混合大小
fstack_params.blendstd = 5; % 混合標準差
fstack_params.logthreshold = 0; % 對數(shù)閾值

% 生成全焦深度圖像和深度信息
[image_rggb, depth_cone] = generate_all_in_focus_rggb(permute(xhat_rgb_crop,[4,3,1,2]) , fstack_params, depth_range, 0);

%% 顯示生成的全焦深度圖像和深度信息
subplot(121);
imshow(mat2gray(squeeze((permute(image_rggb,[1,3,4,2])))))
subplot(122);
imshow(depth_cone,[]);colormap parula

%%
[image_rggb, depth_cone] = generate_all_in_focus_rggb(permute(xhat_rgb,[1,4,2,3]) , fstack_params, depth_range, 0);
image_rggb = image_rggb(:,:,40:197,36:309);
depth_cone = depth_cone(40:197,36:309);
%
subplot(121);
imshow(mat2gray(squeeze((permute(image_rggb,[1,3,4,2])))))
subplot(122);
imshow(depth_cone,[]);colormap parula

%%
% % scene_name='ruler'
% % scene_name = 'toys'
% scene_name = 'two_cards'
% 
% % -- MASKTYPE
% % masktype = 'random'
% masktype = 'opt'
% % masktype = 'scaleXY'
% % masktype = 'shiftXY'

%%% 定義保存結(jié)果的文件夾路徑
save_folder = fullfile('../progMask_results','1202_final_wiener');
if ~exist(save_folder,'dir')
    mkdir(save_folder);
end
% 保存生成的全焦深度圖像
figure(1);
imshow(mat2gray(squeeze((permute(image_rggb,[1,3,4,2])))))
export_fig(fullfile(save_folder, sprintf('image_%s_%s',scene_name,masktype)));
% 保存生成的深度信息
figure(1);
imshow(depth_cone,[]);colormap parula
export_fig(fullfile(save_folder, sprintf('depth_%s_%s',scene_name,masktype)));


A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分,matlab文章來源地址http://www.zghlxwxcb.cn/news/detail-847076.html

到了這里,關(guān)于A Simple Framework for 3D Lensless Imaging with Programmablle Masks 論文代碼部分的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【論文筆記】A Robust Diffusion Modeling Framework for Radar Camera 3D Object Detection

    【論文筆記】A Robust Diffusion Modeling Framework for Radar Camera 3D Object Detection

    原文鏈接:https://openaccess.thecvf.com/content/WACV2024/html/Wu_A_Robust_Diffusion_Modeling_Framework_for_Radar_Camera_3D_Object_WACV_2024_paper.html 本文使用概率去噪擴散模型的技術(shù),提出完全可微的雷達-相機框架。使用校準矩陣將雷達點云投影到圖像上后,在特征編碼器和BEV下的Transformer檢測解碼器中

    2024年01月18日
    瀏覽(28)
  • PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

    PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

    PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images 曠視 本文的目標是 通過擴展 PETR,使其有時序建模和多任務(wù)學(xué)習(xí)的能力 以此建立一個 強有力且統(tǒng)一的框架。 本文主要貢獻: 將 位置 embedding 轉(zhuǎn)換到 時序表示學(xué)習(xí),時序的對齊 是在 3D PE 上做 姿態(tài)變換實現(xiàn)的。提出了

    2024年02月16日
    瀏覽(23)
  • Integrating 3D CT Scans with XRay Angiography for Stabl

    作者:禪與計算機程序設(shè)計藝術(shù) 隨著現(xiàn)代醫(yī)療服務(wù)的進步,越來越多的人接受了臨床二維圖像診斷作為入院首選檢查手段。但是對于一些高危病例,實時三維圖像分析卻無法獲取足夠有效的信息。因此,有必要引入更高質(zhì)量的、準確的影像采集方法。最近,科研人員提出了一

    2024年02月06日
    瀏覽(17)
  • Cross-Modal Learning with 3D Deformable Attention for Action Recognition

    Cross-Modal Learning with 3D Deformable Attention for Action Recognition

    標題:基于三維可變形注意力的跨模態(tài)學(xué)習(xí)用于動作識別 發(fā)表:ICCV2023 在基于視覺的動作識別中,一個重要的挑戰(zhàn)是將具有兩個或多個異構(gòu)模態(tài)的時空特征嵌入到單個特征中。在這項研究中,我們提出了一種 新的三維變形變壓器 ,用于動作識別, 具有自適應(yīng)時空感受野和跨

    2024年03月24日
    瀏覽(34)
  • [論文閱讀]Ghost-free High Dynamic Range Imaging with Context-aware Transformer

    [論文閱讀]Ghost-free High Dynamic Range Imaging with Context-aware Transformer

    高動態(tài)范圍成像(HDR)是一種圖像技術(shù),它能夠捕捉到比傳統(tǒng)圖像更廣泛的亮度范圍。1997年,Paul Debevec在他的論文《Recovering High Dynamic Range Radiance Maps from Photographs》中提出了HDR的概念。論文里提出可以通過對同一個場景進行不同曝光時間的拍攝,然后用這些低動態(tài)范圍 (L

    2024年02月07日
    瀏覽(20)
  • Monocular metasurface camera for passivesingle-shot 4D imaging

    Monocular metasurface camera for passivesingle-shot 4D imaging

    課題組:清華大學(xué)楊原牧、曹良才 期刊:nature communications 一、研究背景 ? ? ? ?傳統(tǒng)相機對于獲取深度、偏振等多維的光場信息是一個巨大挑戰(zhàn)。如果解決這個問題,就會需要其它的光學(xué)元件、時域復(fù)用技術(shù)(我理解為分時技術(shù))和主動激光照明。本文實驗證明了配有單層超構(gòu)

    2024年03月13日
    瀏覽(17)
  • 【EAI 018】VoxPoser: Composable 3D Value Maps for Robotic Manipulation with Language Models

    【EAI 018】VoxPoser: Composable 3D Value Maps for Robotic Manipulation with Language Models

    論文標題:VoxPoser: Composable 3D Value Maps for Robotic Manipulation with Language Models 論文作者:Wenlong Huang, Chen Wang, Ruohan Zhang, Yunzhu Li, Jiajun Wu, Li Fei-Fei 作者單位:Stanford University, University of Illinois Urbana-Champaign 論文原文:https://arxiv.org/abs/2307.05973 論文出處:CoRL 2023 (Oral) 論文被引:64(

    2024年02月22日
    瀏覽(23)
  • NC17383 A Simple Problem with Integers

    題目鏈接 題目描述 You have N integers A1, A2, ... , AN. You are asked to write a program to receive and execute two kinds of instructions: C a b means performing (A_i = A_i^2 mod 2018) for all Ai such that a ≤ i ≤ b. Q a b means query the sum of Aa, Aa+1, ..., Ab. Note that the sum is not taken modulo 2018. 輸入描述 The first line of the i

    2024年02月01日
    瀏覽(17)
  • 多模態(tài)融合2022|TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers

    多模態(tài)融合2022|TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers

    論文題目:TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers 會議:CVPR2022 單位:香港科技大學(xué),華為 1.摘要+intro 作者認為目前的坑是在point-wise級的融合,之前方法存在兩個主要問題,第一,它們簡單地通過逐個元素相加或拼接來融合LiDAR特征和圖像特征,因此

    2023年04月08日
    瀏覽(28)
  • 【論文閱讀】以及部署B(yǎng)EVFusion: A Simple and Robust LiDAR-Camera Fusion Framework

    【論文閱讀】以及部署B(yǎng)EVFusion: A Simple and Robust LiDAR-Camera Fusion Framework

    BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework BEVFusion:一個簡單而強大的LiDAR-相機融合框架 NeurIPS 2022 多模態(tài)傳感器融合意味著信息互補、穩(wěn)定,是自動駕駛感知的重要一環(huán),本文注重工業(yè)落地,實際應(yīng)用 融合方案: 前融合(數(shù)據(jù)級融合)指通過空間對齊直接融合不同模態(tài)的

    2024年02月04日
    瀏覽(52)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包