Translating curves in paint to matlab

  • Context: MATLAB 
  • Thread starter Thread starter tom.coyne
  • Start date Start date
  • Tags Tags
    Curves Matlab Paint
Click For Summary

Discussion Overview

The discussion revolves around the process of translating curves drawn in a paint application into a set of coordinates that can be utilized in MATLAB. The focus is on converting pixel data from images into a matrix format suitable for further analysis and integration, particularly for closed curves like circles and more complex shapes.

Discussion Character

  • Technical explanation
  • Mathematical reasoning
  • Exploratory

Main Points Raised

  • One participant, Tom, seeks a method to convert drawn curves in paint into a matrix of (x,y) coordinates for use in MATLAB.
  • Another participant suggests using the imread command to read an image into MATLAB, indicating that it will convert the image into a matrix of binary values.
  • Tom expresses uncertainty about how to convert the binary matrix into an n x 2 matrix of coordinates, questioning whether a for loop is necessary.
  • A later reply confirms that iterating through the matrix and storing the indices where the element equals 1 will yield the desired coordinates.
  • Tom raises concerns about maintaining the proximity of points in the resulting matrix, especially for complex shapes, and inquires about the possibility of interpolating the data to create a smooth curve.
  • Tom shares a code snippet for generating coordinates from the image matrix and asks for feedback on potential mistakes in his approach.

Areas of Agreement / Disagreement

Participants have not reached a consensus on the best method to ensure that points remain close to each other in the resulting coordinate matrix, nor on the effectiveness of the proposed interpolation method. The discussion includes varying levels of uncertainty regarding the implementation details.

Contextual Notes

Tom's approach relies on the assumption that the binary representation of the image accurately reflects the drawn curve, and there may be limitations in how well this translates to a smooth curve in MATLAB. The discussion does not resolve the potential issues with data accuracy or the interpolation method.

tom.coyne
Messages
8
Reaction score
0
Hi,
I am currently using MATLAB to do some work on simple closed curves in the plane. In order to make this work quite general I have opted to use a matrix which stores (x,y) coordinates of points on my curve (rather than use a function).

I want to feed some interesting curves into my code but currently this relies on me finding a parametric representation and this tends to mean they are not so exciting.

I would like to be able to draw a closed curve in paint or something and then translate that into a set of coordinates which I can store as a matrix in matlab.

Does anyone know how I might go about this??

Thanks,
Tom
 
Last edited:
Physics news on Phys.org
You can read an image into MATLAB using the imread command. Check the docs for details and examples.
 
Thanks for the tip, however after spending some time trawling the help pages, I'm still not sure how to proceed.

So at the moment I have drawn a circle in paint and saved it as a greyscale bmp. imread will then turn this into a matrix of 1's and 0's. I take it these refer to the pixels a 1 meaning there is something drawn there and a 0 meaning nothing drawn.

How can I convert this matrix into an n x 2 matrix which just describes the x and y coordinate of each point on the curve? Am I going to have to run some kind of for loop?

Thanks,
Tom
 
Yes, just step through the matrix and whenever the element==1 you store that position (indices) in your nx2 matrix.
 
How am I going to make sure that the points remain next to each other?

I can see that it would be easy for a line, but it gets more complex for a circle. Then my aim is to make quite complex snake like shapes. Since I will be integrating this data, it would be best if the data points which were close in the picture remained close in the nx2 matrix.

The good thing is the data points I end up with don't have to accurately represent the curve I drew in paint, so would I be able to interpolate the 'messed up' data to make a smooth curve?

Also, more fundamentally, I think I must be making a mistake somewhere, here is what I got for my circle:

A = imread('circle.bmp', 'bmp');

Then I run this:

function [x,y] = coordinate_generator(A)
z = size(A);
k = 1;
for i = 1:z(2)
for j = 1:z(1)
if A(j,i)==0
x(k) = i;
y(k) = j;
k = k+1;
end
end
end

Attached is the start picture and the picture I got from plotting [x,y]

What am I doing wrong?
 

Attachments

  • circle.bmp
    circle.bmp
    27.1 KB · Views: 665
  • plotted data.jpg
    plotted data.jpg
    21.5 KB · Views: 526

Similar threads

  • · Replies 32 ·
2
Replies
32
Views
4K
  • · Replies 9 ·
Replies
9
Views
4K
  • · Replies 18 ·
Replies
18
Views
6K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 1 ·
Replies
1
Views
12K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 3 ·
Replies
3
Views
8K