Do not plot the shape in the middle and polar transformation

4 vues (au cours des 30 derniers jours)
Alex Perrakis
Alex Perrakis le 18 Nov 2021
Commenté : Alex Perrakis le 18 Nov 2021
Hello Guys, i have the above seen plot and i would like not to plot the shape seen within the circle and the do a polar tranformation. So that that circle appears to be a line.
  6 commentaires
Alex Perrakis
Alex Perrakis le 18 Nov 2021
I tried to attach em as tiff but it does not accept em. so i attached em as png
Alex Perrakis
Alex Perrakis le 18 Nov 2021
and here is the 50

Connectez-vous pour commenter.

Réponse acceptée

Adam Danz
Adam Danz le 18 Nov 2021
Modifié(e) : Adam Danz le 18 Nov 2021
This demo uses a cleaned up version of your code and then does the following,
  1. Computes center of noisy circle
  2. Shifts noisy circle to (0,0)
  3. Converts shifted image to polar coordinates
  4. finds the spike in rho values (radii) based on thresholding
  5. Removes the spike.
If you want a smooth circle, you could fit the final (x,y) values to a cirlce (see example) or just use the median rho values in polar coordinates.
% Your code cleaned up
pic01=imread("1.png");
pic050=im2gray( imread("50.png") );
newpicture=imsubtract(pic01,pic050);
%imshow(newpicture)
% level = graythresh(newpicture);
level = 0.1405;
newbinpic = imbinarize(newpicture,level);
%imshowpair(newpicture,newbinpic,'montage')
newbinpic2=bwpropfilt(newbinpic,'perimeter',1);
% imshowpair(newbinpic2,newpicture,'montage');
boundaries = bwboundaries(newbinpic2,'noholes');
% Plot raw (x,y) values
x = boundaries{1}(:,2);
y = boundaries{1}(:,1);
figure()
subplot(2,2,1)
plot(x,y, 'r-')
title('raw values')
axis equal tight
hold on
% Assuming (x,y) is a noisy circle, find center
cnt = [min(x)+range(x)/2, min(y)+range(y)/2];
xline(cnt(1))
yline(cnt(2))
% Shift to (0,0) and compute polar coordinates
[theta, rho] = cart2pol(x-cnt(1), y-cnt(2));
% Plot in polar coord
subplot(2,2,2)
polarplot(theta, rho)
title('Polar coord.')
% Define a reasonable threshold to isolate the spike in RHO values
% 90% of the median looks OK
subplot(2,2,3)
plot(rho)
threshold = median(rho)*.9;
yline(threshold, '-k', 'Threshold')
ylabel('rho'); xlabel('index')
title('rho values')
% Find start and end of peak
peakIdx = find(rho < threshold);
peakIdx(2:end-1) = [];
xline(peakIdx(1)) % plot start of peak
xline(peakIdx(2)) % plot end of peak
% Remove the peak
theta(peakIdx(1):peakIdx(2)) = []; % you can do the same with x
rho(peakIdx(1):peakIdx(2)) = []; % you can do the same with y
% Plot the circle without the interior object
subplot(2,2,4)
polarplot(theta,rho)
title('Inner removed')
  4 commentaires
Adam Danz
Adam Danz le 18 Nov 2021
Modifié(e) : Adam Danz le 18 Nov 2021
It looks like range is in the stats toolbox.
Here's an anonymous function you can include at the top of the code that will replace range()
range = @(x)max(x(:))-min(x(:));
Alex Perrakis
Alex Perrakis le 18 Nov 2021
thanks bro you did me a solid.

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by