- binarize image first
- remove noise using bwareaopen
- use edge
- remove noise if needed using bwareaopen
How to detect a curve (surface roughness) from image?
11 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Sepehr Simaafrookhteh
el 4 de Abr. de 2021
Comentada: Sepehr Simaafrookhteh
el 17 de Abr. de 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 comentarios
Respuesta aceptada
darova
el 4 de Abr. de 2021
Editada: darova
el 4 de Abr. de 2021
7 comentarios
darova
el 6 de Abr. de 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)
Más respuestas (0)
Ver también
Categorías
Más información sobre Image Processing Toolbox en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!