measure the distance between two object
10 views (last 30 days)
Show older comments
weam on 24 Mar 2023
Commented: weam on 26 Mar 2023
I detect two different objects in Yolo v4 and I want to measure the distance between them, what is the method to measure the distance
can anyone help me...
Walter Roberson on 24 Mar 2023
If you want the "real-world" distance, then you will either need to know the resolution of the pixels, or else you will need to have some kind of reference object in the image that can be compared against.
Bounding boxes will not work properly. If you trace the borders of the objects, and one object is not inside the other, then you can use pdist2() to find the distance from each point along one boundary to each point along the other boundary, and take the minimum distance as being the distance between the two.
If you take the bounding box that includes both objects, and construct a binary image that is true inside the bounding box only in places where neither object exists, then you might possibly be able to do something with the feret distance; https://blogs.mathworks.com/steve/2017/09/29/feret-diameter-introduction/?s_tid=srchtitle_feret%20distance_3
Image Analyst on 26 Mar 2023
Edited: Image Analyst on 26 Mar 2023
I have no idea why you decided to use YOLO for this task:
Maybe some data scientist told you to do that. They seem to think neural networks/deep learning are the solution for everything. Wrong. Kind of like how most novice image processing people think all algorithms begin with edge detection as step one. Again, wrong. Most "data scientists" come from a math, programming, or statistics background and they are sadly unaware of optics, lighting, imaging, color science, and traditional image processing methods like an imaging person would know, because they've never been trained in those topics. And it's not just me saying that. Imaging professors say that too. One said that most data scientists have only one tool (deep learning) in their toolbox : a hammer. If all they see if nails, they're fine but when they encounter a screw, they're in trouble. But an imaging scientist will have both hammers and screwdrivers in their toolbox and know which tool to use when.
This is a simple traditional task. No need to over complicate it with training a network.
This looks like a machine vision application where you are simply making caliper-type distance measurements in some kind of inspection rig. So in that case, your task is made simpler by the fact that the camera is bolted down, the lens is bolted down, the lighting is consistent, etc. So in that case you can do there steps:
- Rotate the image so that the black rod is horizontal. It will be a fixed, known angle for all your images.
- Crop your image to the known location of the black rod and light colored metal pieces on each end.
- Threshold to find the largest dark blob.
- Call regionprops to get it's bounding box. The left-most x value is the first element of the bounding box.
- Subtract the known, fixed value of the metal edge on the left from the x value of the black rod to get the distance. Multiply by the spatial calibration factor to get the distance in mm.
- Find the middle y value of the bounding box. That is the center of the black rod.
- Subtract the y location of wherever the top of the blue line is from the center of the black rod to get the vertical distance you've shown in blue. Multiply by the spatial calibration factor to get the distance in mm.
See attached spatial calibration demo.
Find more on Object Detection in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!