pdfbcalc_imagekld.m
来自「matlab官方网站中的用于图像融合技术的contourlet变换源代码」· M 代码 · 共 85 行
M
85 行
% pdfbcalc_imagekld.m% written by: Duncan Po% Date: November 16, 2002% calculate the Kublick-Liebler distance between two images based on % on their hidden markov tree parameters% Usage: kld = pdfbcalc_imagekld(savename, sdir, model1, model2)% kld = pdfbcalc_imagekld(savename, sdir, image1, model2, imformat1)% kld = pdfbcalc_imagekld(savename, sdir, image1, image2, imformat1, % imformat2)% Inputs: model1 - first Hidden Markov Tree Model% model2 - second Hidden Markov Tree Model% image1 - first image file name% image2 - second image file name% imformat1 - format of the first image file% imformat2 - format of the second image file% savename - filename to save the model of image1% - set to '' if no save desired% sdir - full pathname to save the model 1 (also set to ''% if savename == '')% Output: kld - the Kullback Liebler distance between the trees% kld2 - KLD estimation using Monte Carlo method%function [kld, kld2] = pdfbcalc_imagekld(savename, sdir, model1, model2, ...% imf1, imf2)function [kld, kld2] = pdfbcalc_imagekld(savename, sdir, model1, model2, ... imf1, imf2)% initialize the kldkld = 0;kld2 = 0;if nargin == 6 % this case is when the images are provided but not the models image1 = model1; image2 = model2; % train the HMT models first [model1, dummy] = pdfbtrainimagethmt(image1, imf1, '', 0.01); [model2, dummy] = pdfbtrainimagethmt(image2, imf2, '', 0.01);elseif nargin == 5 % this case is when we have one model and one image, need to % train a second model using the image provided image1 = model1; % train the HMT model [model1, dummy] = pdfbtrainimagethmt(image1, imf1, '', 0.01); %there is also the case for two models and no image when nargin==3 %in that case, no training is neededend;if strcmp(savename, '') ~= 1 file = sprintf('%s%s', sdir, savename); save(file,'model1');end;N = 60;nlevel = model1{1}.nlevels;for k = 1:nlevel levndir(k) = log2(length(model1{1}.stdv{k}));end;% treat each tree as independent and using chain rule of KLD for% independent variables, simply add up the distancesfor index = 1:length(model1) minkld = 10000; dbmodels = pdfbcreate_equiv_models(model1{index}); for mmm = 1:length(dbmodels) tkld = pdfbcalc_KLD(nlevel, levndir, model2{index}, dbmodels{mmm}); if tkld < minkld minkld = tkld; end; end; kld = kld + minkld;end;% Also apply the Monte Carlo method to verify the KLD estimationfor index = 1:length(model1) kld2 = kld2 + pdfbest_KLD(nlevel, levndir ,model2{index}, ... model1{index}, N); end;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?