MathGroup Archive 2013

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Converting a magnified image of a line to a single pixel smoothed

  • To: mathgroup at smc.vnet.net
  • Subject: [mg130596] Re: Converting a magnified image of a line to a single pixel smoothed
  • From: "Dave Waddell" <dwwaddell at gmail.com>
  • Date: Thu, 25 Apr 2013 02:52:04 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-outx@smc.vnet.net
  • Delivered-to: mathgroup-newsendx@smc.vnet.net
  • References: <20130417063041.7376E6A61@smc.vnet.net> <517000DA.6080104@wolfram.com> <20130420094129.929D46A38@smc.vnet.net> <517558E4.4030506@wolfram.com>

On 4/20/13 4:41 AM, Dave Waddell wrote:
> I tried converting the result image to a graph so that I could apply a 
> moving average and then fit a B-spline through it. As you can tell I'm 
> new to Mathematica:
> data = ArrayRules@SparseArray@ImageData[result]
> It was all downhill after that. Another nudge would be appreciated.
> Thanks, Dave.
> 
> Dave,
> 
> On 4/17/13 1:30 AM, Dave Waddell wrote:
>> I have a magnified image of a 0.1mm line here:
>> http://www.d-a-v-e.org/images/Trace.jpg
>> ... this converts with Binarize very well:
>> http://www.d-a-v-e.org/images/Trace%20binary.jpg
>> ... but what I would like to do is convert it to a single pixel wide
> smoothed line running right up the middle. Any suggestions or pointers 
> on how to do this in Mathematica would be appreciated.
>> Dave
>>
> 
> The sequence below seems like a good start.
> The documentation for the functions should help you understand what is 
> going on in more details:
> 
> trace = Import["http://www.d-a-v-e.org/images/Trace.jpg";]
> 
> b = ColorNegate@Binarize[trace];
> b2 = SelectComponents[b, "Area", -1];
> b3 = FillingTransform@b2;
> dt = ImageAdjust@DistanceTransform@b3; result = 
> ColorNegate@Image[WatershedComponents[dt], "Bit"]; 
> HighlightImage[trace, result]
> 
> 
> Matthias Odisio
> Wolfram Research

ImageValuePositions will give you the coordinates of the white pixels:

In[21]:= ImageValuePositions[Image[IdentityMatrix[3], "Bit"], 1]

Out[21]= {{0.5, 2.5}, {1.5, 1.5}, {2.5, 0.5}}

Please note that ImageValuePositions does not sort the returned positions in
any specific order.

Matthias

So I think I'm really close:
resultOut =  ImageValuePositions[Image[WatershedComponents[dt], "Bit"], 0]
BSplineFunction[MovingAverage[resultOut, 5]]
ParametricPlot[%170[x], {x, -8, 8}]

... but I feel I could do much better and make it smoother. All suggestions
are much appreciated.
Dave




  • Prev by Date: Re: Sparse Array Question
  • Next by Date: Export to PDF outline issues
  • Previous by thread: Re: Converting a magnified image of a line to a single
  • Next by thread: Re: Converting a magnified image of a line to a single