Fit image gradient into exponential distribution function

조회 수: 16 (최근 30일)
Francescodario Cuzzocrea
Francescodario Cuzzocrea 2019년 11월 5일
답변: Subhadeep Koley 2019년 11월 8일
Hi,
I've developed a very simple code which computes the gradient of a filtered B&W image, compute the gradient, normalize it and then shows the histogram.
For instance :
I = imread(image.jpg);
I_filt = imgaussfilt(I,5.4);
[Gx, Gy] = imgradientxy(I_filt,'prewitt');
[Gmag, Gdir] = imgradient(Gx,Gy);
N = normalize(Gmag,'range');
figure
histmag = histogram(N,100,'Normalization','count');
xlabel('Gradient');
ylabel('Count');
xlim([0 1.5]);
It can be seen that the resulting histogram can be fitted with an exponential probability function, in order to be able to treshold it by limiting the cumulative function to 0.99 or some other treshold.
untitled1.resized.png
I'm interested also in viewing the curve of the exponential probability function.
The point is that I cannot understand what matlab tool I could use to do the fit, I tried using expfit and exppdf on N, but that does not seem to work.
Thank you in advance !!

답변 (1개)

Subhadeep Koley
Subhadeep Koley 2019년 11월 8일
Hi, Refer the code below which fits n degree polynomial to the histogram data. You can tweak the ‘n’ value to find the best fit.
% Read your image
I = imread('cameraman.tif');
% Perform gaussian filtering
I_filt = imgaussfilt(I,5.4);
% Gradient calculation
[Gx, Gy] = imgradientxy(I_filt,'prewitt');
[Gmag, Gdir] = imgradient(Gx,Gy);
% Rescaling the image
N = rescale(Gmag);
% Histogram count calculation
[counts,binLocations] = imhist(N, 100);
% Plot histogram
figure; bar(1:100, counts);
xlabel('Gradient'); ylabel('Count');
% nth order Polynomial fitting
n = 5;
c=polyfit(binLocations, counts,n);
histFit=polyval(c,binLocations);
% Plot the fit
hold on; plot(binLocations.*100,histFit,'LineWidth',3);
axis tight; legend({'Histogram','Fit'});
Hope this helps!

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by