FPGA ISP 金字塔融合 Round1

2021-10-03 16:15:54 字數 2571 閱讀 8867

最近接到乙個任務,要在fpga實現高斯金字塔和拉普拉斯金字塔融合的實現寬動態,…

不過仔細想想,平靜下心態來,我還是的自己學會這個演算法。不管fpga實現的最終結果如何, 也算是對自己的一種提高了。

看**首先從main開始

clear all;

clc;

% 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 = left_pyramid .* mask_pyramid + right_pyramid .* (1 - mask_pyramid);

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');

主函式首先讀入兩幅,分為left和right,判斷兩幅影象的size是否相同

並對影象做預處理,保證影象解析度為偶數。

此處每一層的掩碼需要儲存,作為權重,與對應層的拉普拉斯影象金字塔相乘,然後疊加。

接下是今天的重點,高斯金字塔,即掩碼金字塔。

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 = image;

for i = 2 : iternum

% gaussian filtering

% imfilter 對於rgb影象相當於三個通道分別處理,然後進行cat操作

temp = imfilter(pyramid, gaussian_filter, 'replicate');

% down sampling

rows = size(temp, 1);

cols = size(temp, 2);

temp = temp(1:2:rows, 1:2:cols, :);

pyramid = temp;

end

作者首先在水平方向計算5點高斯分布,然後計算二位5x5高斯kernel

這裡金字塔的最底層,即為輸入的影象,直接賦值到元胞陣列pyramid中,重點是看第2層到第iternum層是如何計算的。

對於第i層,首先將第i-1層經過高斯濾波,這裡邊界採用複製的方式處理(後面通過**,確定邊界處理的方式,對演算法影響的程度,fpga在實現影象演算法時,我通常是不做處理)。

輸出的結果再水平方向和垂直方向按照奇數列抽取,得到當前層i所對應的權重,並存入元胞陣列。

此處需要注意融合的初始權重設計,如圖所示,左側全為1,右側全為0。

不過實際在基於金字塔完成hdr時,兩幅影象的權重計在**中看到,會考慮到影象的邊緣、飽和度、亮度。這個在我學會了這個基礎的以後,嘗試自己改**,實現一下hdr融合權重的計算。

python 金字塔 Python金字塔

托倫,函式中有幾個小錯誤和乙個邏輯問題print y to a 請注意,此函式生成乙個以z開頭的字串,但您希望將字串以相反的方向連線,而您的另乙個函式print a to y 確實停止了 1位置 例如 還要注意,您需要新增新行字元 n 以獲得一些不錯的輸出。在 我的解決方案是 def print a...

字母金字塔(類同數字金字塔)

問題描述 讓程式要求使用者輸入乙個大寫字母,使用巢狀迴圈產生像下面這樣的金字塔圖案 aaba abcba abcdba abcdecba 演算法分析 每行包括三個部分內容 若干個空格 正序排列的字母 倒序排列的字幕。使用乙個外部迴圈來處理行,在每乙個行中使用三個內部迴圈 乙個處理空格,乙個以公升序列...

拉普拉斯金字塔融合

影象金字塔方法的原理是 將參加融合的的每幅影象分解為多尺度的金字塔影象序列,將低解析度的影象在上層,高解析度的影象在下層,上層影象的大小為前一層影象大小的1 4。層數為0,1,2 n。將所有影象的金字塔在相應層上以一定的規則融合,就可得到合成金字塔,再將該合成金字塔按照金字塔生成的逆過程進行重構,得...