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>
- Converting a magnified image of a line to a single pixel smoothed