
Detect the vertical dark layers in greysacale image
2 views (last 30 days)
Show older comments
Hi!
I have a grayscale image with dark vertical layers. I want to know the average pixel-width of the dark layers in the following image:

What I found problematic is that the image also contains noise which can be seen when I use the canny edge detection:

Any sugestions which method can be used in this case?
Thanks in advance
0 Comments
Answers (1)
Akira Agata
on 25 Jan 2020
By applying findpeaks function (with appropriate option settings) to the average intensity profile, you can detect locations of dark bands.
I'm not sure what is the definition of the "average pixel-width" of dark band, but I believe one possible (and simple) solution would be detectiong width at the half-prominence point for each nitch in the the average intensity profile.
% Read the image
I = imread('arsringsbild2.png');
I = rgb2gray(I);
% Calculate average intensity and dark positions
avgIntensity = mean(double(I));
[val,pos] = findpeaks(-1*avgIntensity,...
'MinPeakProminence', 40,...
'MinPeakHeight', -100);
val = -1*val;
% Visualize the result
figure
subplot('Position',[0.1 0.8 0.8 0.15])
imshow(I)
subplot('Position',[0.1 0.1 0.8 0.7])
plot(avgIntensity)
hold on
scatter(pos,val,'^','filled')
legend({'Avg. Intensity','Detected dark position'},'FontSize',12)
xlim([1 size(I,2)])
ylabel('Average intensity for each horizontal position')

See Also
Categories
Find more on Feature Detection and Extraction in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!