最近接到乙個任務,要在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。將所有影象的金字塔在相應層上以一定的規則融合,就可得到合成金字塔,再將該合成金字塔按照金字塔生成的逆過程進行重構,得...