FPGA ISPピラミッド融合-Round1

FPGA ISPピラミッド融合-Round1

最近では、FPGAで広いダイナミックガウシアンピラミッドとラプラシアンピラミッドの統合を達成するためのタスクを受けました...

しかし、心の穏やかな状態が、私はまだアルゴリズムを学ぶために所有し、それについて考えます。かかわらず、最終的な結果のFPGA実装のでなく、自分自身の種類を改善する方法として。

あなたは、このような私を照らすために夜の光としてのGithub上で利用可能CSshengxyコードを、ありがとうございます。興味のある学生は、彼のスターああを与える必要があり、検索のダウンロードを行かなければなりません!

まず、メインのスタートからのコードを見て

clear all;
clc;

% leftImage = double(imread('apple.png'));
% rightImage = double(imread('orange.png'));

iternum = 5;

if (size(leftImage) ~= size(rightImage))
    error('Input images are not the same size!')
end

% 预处理,使图片height,width为偶数
[rows, cols, channels] = size(leftImage);

% mask gaussian
mask = double(zeros(rows, cols, channels));
mask(:, 1:floor(cols/2), :) = ones(rows, floor(cols/2), channels);
mask_pyramid = GaussianPyramid(mask, iternum);


% leftImage pyramid and rightImage pyramid
left_pyramid = LaplacianPyramid(leftImage, iternum);
right_pyramid = LaplacianPyramid(rightImage, iternum);

% TODO: get blend laplacian pyramid
blend_pyramid = cell(iternum, 1);
for i = 1:iternum
    blend_pyramid{i} = left_pyramid{i} .* mask_pyramid{i} + right_pyramid{i} .* (1 - mask_pyramid{i});
end

% reconstruct the blend image
blendImage = LaplacianReconstruct(blend_pyramid);
imwrite(uint8(blendImage), 'blendImage.png');

figure;
imshow(uint8(leftImage));
title('leftImage');
figure;
imshow(uint8(rightImage));
title('rightImage');
figure;
imshow('blendImage.png');
title('blendImage');

まず、主な機能は、2枚の画像を読み取り、左側に分割され、右、2枚の画像のサイズの決意は同じです

そして、画像は、画像の解像度が偶数であることを保証するために前処理します。

各層は、対応する層のラプラシアン画像ピラミッドを乗じ、重みとして、ここで保存する必要性をマスクし、次に重ね合わさ。

今日の焦点は、ガウシアンピラミッド、すなわちマスクピラミッドを引き継ぐことです。

function pyramid=GaussianPyramid(image, iternum)
    gaussian_filter = [1, 4, 6, 4, 1]*(1/16);
    gaussian_filter = gaussian_filter' * gaussian_filter;
    
    pyramid = cell(iternum, 1);
    pyramid{1} = image;
    
    for i = 2 : iternum
        % gaussian filtering
        % imfilter 对于rgb图像相当于三个通道分别处理,然后进行cat操作
        temp = imfilter(pyramid{i-1}, gaussian_filter, 'replicate');
        % down sampling
        rows = size(temp, 1);
        cols = size(temp, 2);
        temp = temp(1:2:rows, 1:2:cols, :);
        pyramid{i} = temp;
        
    end

最初の計算の5:00水平方向のガウス分布、および2つの5×5のガウスカーネルを計算します

ここでピラミッドの底、直接細胞アレイピラミッド{1}に割り当てられた入力された画像は、キーは、第2の層2はiternumを算出層にどのように表示することです。

第1のi層のために、最初のi-1番目の層は、私は通常、画像のアルゴリズムを実装する場合、後でシミュレーションによる処理コピーの方法によって境界(境界処理、衝撃アルゴリズムの、FPGAを決定ガウシアンフィルタにかけられます)扱われません。

次いで、結果出力奇数列の抽出に応じて水平および垂直方向は、電流Iの量と記憶されている細胞のアレイに対応する適切なレベルを得ることができます。

示されるように、初期重量設計融合ここで注意し、全て1の左側、全て0権利。

ここに画像を挿入説明

なぜこのような設計には、実行はハハ、知っているコードをダウンロードすることができます!

ピラミッド・ベースのHDRの実際の完了は、右の重量の2枚の画像が用紙に表示するときには、アカウントに画像、彩度、明度のエッジを取ります。この私が、この基盤を知った後、重いウェイトのHDR融合が計算ものを達成するために、独自のコードを変更してみてください。

公開された19元の記事 ウォンの賞賛1 ビュー577

おすすめ

転載: blog.csdn.net/wuyanbei24/article/details/104744341