Hurst exponent in matlab

7 ビュー (過去 30 日間)
Madi khad
Madi khad 2020 年 1 月 14 日
回答済み: Meg Noah 2020 年 1 月 15 日
Hello,
i need to calculate the slope of the relationship between the log of the semivariance and the log of the distance determined by regression for a distance (x), varying from 0
to 1.5 cm. Any help?
Thank you

採用された回答

Meg Noah
Meg Noah 2020 年 1 月 15 日
Here's one way, but you'll have to change it to have pixels as length dimensions:
%% *fractalDimension*
%% *definition*
function [fractalDim,Hurst,outImage] = fractalDimension(inImage,epsilon,window)
%% *purpose*
% to compute the fractal dimension of an image
%% *example*
%{
MaxLevel = 12; % size of image is 2^MaxLevel+1
seed = 8675309; % seed enables repeatability
H = 0.5; % Hurst parameters a values between 0 and 1
myImage = midpoint(MaxLevel,H,seed);
N = 2.0^MaxLevel;
figure('Color','white');
imagesc(-N/2:N/2,-N/2:N/2,h01,[-3 3]);
title({'Fractional Brownian Motion';['Hurst =' num2str(H) ...
' Fractal Dimension =' num2str(3-H)]},'fontsize',14);
axis equal
axis tight
colormap(bone);
colorbar
set(gca,'fontweight','bold');
epsilon = 11;
window = 21;
[fractalDim,Hurst,outImage] = fractalDimension(myImage,epsilon,window);
%}
%% *inputs*
% inImage - input image
% epsilon - scaling parameter for search (typically between 3 and 11)
% window - dimension of fractal homogeneity (local fractal dimension)
%% *outputs*
% outImage - local fractal dimension
%% *history*
% when who why
% 20200115 mnoah original code
%%
% compute window region and log epsilon
halfmask = floor(window/2);
window = 2*halfmask + 1;
nmask = double(window)^2;
mask = ones(window,window)./nmask;
log_epsilon = log(double(epsilon));
%% allocate space for temporary arrays
[nrow,ncol] = size(inImage);
idata2e = zeros(nrow,ncol);
idata2r = zeros(nrow,ncol);
outImage = zeros(nrow,ncol);
%% create difference arrays
idata2r = ...
abs(inImage - circshift(inImage, 1,1)) + ...
abs(inImage - circshift(inImage,-1,1)) + ...
abs(inImage - circshift(inImage, 1,2)) + ...
abs(inImage - circshift(inImage,-1,2));
idata2e = ...
abs(inImage - circshift(inImage, epsilon,1)) + ...
abs(inImage - circshift(inImage,-epsilon,1)) + ...
abs(inImage - circshift(inImage, epsilon,2)) + ...
abs(inImage - circshift(inImage,-epsilon,2));
datavalr = conv2(idata2r,mask,'same');
datavale = conv2(idata2e,mask,'same');
idx = (datavalr > 0.0 & datavale > 0.0);
outImage(idx) = log(datavalr(idx)) - log(datavale(idx));
outImage(idx) = 3.0 + outImage(idx)/log_epsilon;
fractalDim = mean(mean(outImage(halfmask:end-halfmask,halfmask:end-halfmask)));
Hurst = 3 - fractalDim;
disp(['Image average fractal dimension = ' num2str(fractalDim)]);
disp(['Image average Hurst Parameter = ' num2str(Hurst)]);
end
The example uses a function I shared on matlab central

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeFractals についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by