
Detect the vertical dark layers in greysacale image
2 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(1 个)
Akira Agata
2020-1-25
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')

另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Feature Detection and Extraction 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!