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

**References**:**Converting a magnified image of a line to a single pixel smoothed***From:*Dave Waddell <dwwaddell@gmail.com>

**Re: Converting a magnified image of a line to a single pixel smoothed***From:*"Dave Waddell" <dwwaddell@gmail.com>