- binarize image first
- remove noise using bwareaopen
- use edge
- remove noise if needed using bwareaopen
How to detect a curve (surface roughness) from image?
15 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Sepehr Simaafrookhteh
il 4 Apr 2021
Commentato: Sepehr Simaafrookhteh
il 17 Apr 2021
I am working with a stack of 2D projections from X-ray microCT. I am going to find the coordinates of surface roughnesses curvature on 2D images and then extend it to 3D to have a cloud of points.
Images are like this:
I used "edge" function with different methods, but the results are not perfect, there are some separated lines and noises. I appreicate any better solution for this purpose and how can I get the coordinates of the detected curve? I assume then I have to apply a loop to get the results for the whole volume.
Thank you in advance for your help/comments.
0 Commenti
Risposta accettata
darova
il 4 Apr 2021
Modificato: darova
il 4 Apr 2021
7 Commenti
darova
il 6 Apr 2021
Let's say A is your image
A = sprintf('image.png'); % read first image to get size
[m,n] = size(A);
ix1 = 1:n; % value for interpolation
Z = zeros(500,n); % create matrix for 500 images profiles
for i = 1:500
s = sprintf('image%d.png',i);
A = imread(s); % read binary image
[~,y] = max(A); % find max index (ones)
ix = find(y); % find non-zero elements
y1 = interp1(ix,y(ix),x1); % inteprolate zero values
Z(i,:) = y1; % fill 2d matrix
end
surf(Z)
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Image Processing Toolbox in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!