Center to center distances between lines: Error in vertical distances

1 vue (au cours des 30 derniers jours)
Abdul Hannan Qureshi
Abdul Hannan Qureshi le 5 Juin 2022
I am working on center-to-center distance between lines using following script:
IIraster = imclearborder(Irasterl);
props = regionprops(IIraster, 'Area');
allAreas = sort([props.Area])
IIraster = ~bwareaopen(~IIraster, 500);
IIraster = bwareafilt(IIraster, 1);
[rows, columns, numberOfColorChannels] = size(IIraster)
% Get horizantal bars
barsH = medfilt2(IIraster, [1, 11]);
props = regionprops(barsH, 'Area', 'PixelList');
numLinesH = length(props);
hold on;
for k = 1 : numLinesH
x = props(k).PixelList(:, 1);
y = props(k).PixelList(:, 2);
coefficientsH{k} = polyfit(x, y, 2);
xFitH{k} = 1 : columns;
yFitH{k} = polyval(coefficientsH{k}, xFitH{k});
plot(xFitH{k}, yFitH{k}, 'r-', 'LineWidth', 2);
end
% Get vertical bars
barsV = medfilt2(IIraster, [11, 1]);
props = regionprops(barsV, 'Area', 'PixelList');
numLinesV = length(props);
hold on;
for k = 1 : numLinesV
x = props(k).PixelList(:, 2);
y = props(k).PixelList(:, 1);
coefficientsV{k} = polyfit(x, y, 2);
xFitV{k} = 1 : rows;
yFitV{k} = polyval(coefficientsV{k}, xFitV{k});
[xFitV{k}, yFitV{k}] = deal(yFitV{k}, xFitV{k});
plot(xFitV{k}, yFitV{k}, 'r-', 'LineWidth', 2);
end
imshow(zeros(rows, columns, 'uint8'));
impixelinfo;
hold on;
axis('on', 'image')
XCrossings = zeros(numLinesH, numLinesV);
YCrossings = zeros(numLinesH, numLinesV);
for k1 = 1 : numLinesH
fprintf('Finding where vertical lines cross horizontal line #%d.\n', k1);
xyH = [xFitH{k1}', yFitH{k1}'];
plot(xyH(:, 1), xyH(:, 2), 'g-', 'LineWidth', 2);
for k2 = 1 : numLinesV
xyV = [xFitV{k2}', yFitV{k2}'];
plot(xyV(:, 1), xyV(:, 2), 'r-', 'LineWidth', 2);
distances = pdist2(xyH, xyV);
minDistance = min(distances(distances > 0));
[minRowH, minRowV] = find(distances == minDistance);
xCrossing = mean([xyH(minRowH, 1), xyV(minRowV, 1)]);
yCrossing = mean([xyH(minRowH, 2), xyV(minRowV, 2)]);
XCrossings(k1, k2) = xCrossing;
YCrossings(k1, k2) = yCrossing;
plot(XCrossings(k1, k2), YCrossings(k1, k2), 'c.', 'MarkerSize', 20);
drawnow;
end
end
plot(XCrossings(:), YCrossings(:), 'c.', 'MarkerSize', 20);
title('Crossings Found', 'FontSize', 12);
morespace=-5;
HDists=hypot( diff(XCrossings,1,2), diff(YCrossings,1,2));
xlocs=conv2(XCrossings,[1,1]/2,'same');
figure(gcf);
[m,n]=size(HDists);
for i=1:m
for j=1:n
k=sub2ind([8,8],i,j);
text(xlocs(k)+morespace,YCrossings(k)+morespace, round(HDists(i,j))+" cm",'Color','g','FontSize',12)
end
end
VDists=hypot( diff(XCrossings,1,1), diff(YCrossings,1,1));
ylocs=conv2(YCrossings,[1,1]'/2,'same');
morespace=2;
[m,n]=size(VDists);
for i=1:m
for j=1:n
k=sub2ind([8,8],i,j);
text(XCrossings(k)+morespace,ylocs(k)+morespace, round(VDists(i,j))+" cm",'Color','r','FontSize',12)
end
end
horizantal center-to-center distances are coming okay.
However, I am unable to adjust middle vertical center-to-center distances (highlighted in blue). these two rows are adding upper and lower lines and showing collective distances.
Irasterl.mat file is enclosed. Kindly advise.

Réponses (1)

Matt J
Matt J le 5 Juin 2022
  1 commentaire
Abdul Hannan Qureshi
Abdul Hannan Qureshi le 6 Juin 2022
Dear @Matt J thank you for your reply. I am following same script. Only difference is, I have changed the image to low resolution raster image. I have also reduced the parameters values inside as this image is low resolution.
barsH = medfilt2(IIraster, [1, 11]);
barsV = medfilt2(IIraster, [11, 1]);
Horizantal values are coming ok, but for vertical distances it is mixing central two rows. I have tried alot changing different parameters but for low resolution image such error have been observed again and again. I am unable to understand the problem.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Images dans Help Center et File Exchange

Produits


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by