- get raw edges
- angular division: get w/z ratios.inner + outer
- check current CC w/z ratios
- * find offensive azimuth and show them
- find offensive azimuth and assign a value corresponding to the median ratio
Thursday, October 30, 2008
sting removal: steps
Wednesday, October 29, 2008
Today: start on refining groove detaching
A few things to try
- A global fixing or local fixing of ho-linkage only?
- stats of width/depth
Tuesday, October 28, 2008
restore: post-processing remove-holes should be done separately
...to all FOVs scattered in different tags,
and assemble them to the same output folder
and assemble them to the same output folder
Monday, October 27, 2008
detach: btm-ho-btm sandwich
Problem
- Rule: r_btm_inner < r_ho < r_btm_outer is not robust, either parallel bottom can be missing, or global radius relationship can defy this assumption.
- find inter-centroid radial distance between ho and btm's, take the nearest two btm's as the wrap.
Saturday, October 25, 2008
Redesign saving/loading
Problem
- recursive process on filtering attached/detached FOVs requires non-destructive saving
- currently we have only one output folder, one loading folder for each type of base data
- FOVs that are iterated 3 times can't start with the same folder as those that are done 2 times.
- Non-processed and processed files (output figs) blend together and hart to check.
- 2D/depth data are not fully synchronized after filtering.
- at the beginning of an iteration, load the tag file from the same place to retrieve iteration number; at the end of every iteration, update the tag file with an increment in the iteration number.
- all output folders are named with the iteration number, and loading is done with the correct folder.
- each process has its own tag series, e.g., stitch-blob-1, stitch-small-2, attach-1, broken-2....
- non-processed FOVs does not output fig/img!!!
- loading process should be stupid, load() doesn't have to know how to compose the folder names.
- i_round: current round to be saved; i_round_prev = i_round-1: prev round to be loaded.
Friday, October 24, 2008
[detach] nb-FOVs: bad about chain reaction on nb-FOVs
it is destructive in that it only performs "adding points" (set stuff to be zero, i.e., holes), but never recovering from the added points.
Wednesday, October 22, 2008
[failed] use bottom to bound holes
can't just simply use bottom/holes bbox to narrow down hole chains....
has to be done with an angular iteration to make sure at each azimuth the bbox fits
has to be done with an angular iteration to make sure at each azimuth the bbox fits
Tuesday, October 14, 2008
Attached Grooves: new algo by bottom detection
- basis: an attached groove must have bottom in the CC area; it must have 2+ bottom threads in there.
- difficulty: bottom threads might be intermittent, hence the true number of bottom threads is hard to get; hough-based method is not flexible enough to adapt to all shapes of bottoms.
- solution: find number of bottom threads; find holes between each one of them and chain them up in order.
- detection procedure:
- get bottom-only image
- bottom-CC analysis
- bottom-CC angular grouping
- check bottom-groove-CC ownership: which bottom belongs to which groove.
- those who owns 1+ bottoms are attached.
- enlist those who owns 0 bottoms.
- get bottom-only image
- detaching:
- make sure bottom is there in the gap
- along with each bottom associated with the gap, get the promising top edge points that ensure a constant groove width.
- deteching procedure: (discarded)
- find chains of holes, and the intact bounding top edges
- collect angular widths by holes and its opposite edges, each hole has inner/outer pair of track widths
- from inner "tracks" to outer ones, collect bounding nodes for filler areas, by checking the width consistency against the other "intact" edge; the filled hole boundary track will become the reference for the next adjacent track.
- for chain_holes, filter out noises (off-center)
- sort holes by angular ranges
- the filling order will be, both ends of the attached groove first, i.e., innermost and outermost.
- for each azimuth in gap, search for its opposite edge point across the bottom, by azimuth; if no edge point available, e.g., track in the middle, look for bottom instead, and apply half-width.
- against mean width (or half-width) of pair widths on the side, calc the polar pos of the filler boundary point; polar-to-rect conversion.
- after a pair of boundary is done, make the second thread the reference edge for the next track's first thread.
- remove any ho in the filler area defined by the bounding points.
- cosmetic filler is hard to be done here, e.g., if the missing filler point is near FOV boundary, it is hard to collect reference points if opposite edge is outside of the FOV.
- but we have few choices but to do it here, because it only makes sense to do this bold "data filling" while we know which FOV to fix; in other words, we cannot run the filler process over the entire unwrapped thread or pure edge data without distroting the entire audio signal;
- the best place to insert this sting-removal step is after raw edge detection, and we only work on FOVs that contained attached grooves. This way, we don't have to deal with lots of "holes" and figure out their sides and "opposite" points; the dusty texture would have been removed by the coarse detaching procedure.
- the FOVs that need to be registered include the ones that contain attached grooves, and those around them that share overlaps in the filler area.
- sting-removal procedure:
- for each registered attached groove, get the raw edges
- needs experiment: get the median ratio of half-width to depth, or width to depth, of current CC or all CCs; ignore those azimuths without bottom
- Statistics: for each azimuth of inner/outer, collect ratio = bottom-edge width / depth; if no bottom is available there, skip; this "unavailability" includes the situation where source edge point is at an azimuth that is beyond the angular range of the bottom, e.g., near FOV boundary. WHY? because in its overlap neighbor, this will be solved nicely and then we get back here to fill in the points.
- take median ratio; set a threshold based on median ratio as the numerical reference for the FOV.
- for each azimuth of inner/outer, measure their ratio against the reference, if it's too big (too wide because of the sting), try to find the closer point that makes it as wide as the median, take it as a node.
- Thin gap remedy for missing bottom: if missing bottom at the place, take edge-to-edge width and angularly closest bottom r/z as the imaginary bottom, from the contrived bottom position, extrapolate both edges through median ratio.
- after collecting all new nodes of the FOV, for each holes in inverted-CC analysis, fill holes; save them back into "filter_attach"; redo CC analysis + edge detection.
- finally, get nb-FOVs' corresponding points, and fill them as well; redo CC analysis + edge detection for nb-FOV.
- Side track: in coarse detaching phase, always try starting from the result folder to see if a modification from neighbor FOV has happened, and the current detaching will happen on top of that result.
- Side track: if there are any non-attaching-caused stings, after edge detection, they will be spread and change the topology of the 1D edge. So edge has to be sampled before array-length calibration. NOTE: if calibration is done based on angle range discrepancy, no need to do an extra resample before bottom-1D-from-2D.
Saturday, October 11, 2008
Reconsider groove edge as the representation of audio waveform
Summary
- Previously we decided to collect all pixel-level edges of CCs as our raw database of extracted audio. We hope that resampling and fitting could give us a safely downsampled version of hi-fidelity audio signal.
- However, there is a fundamental flaw in this approach. By using any low-level edge detection, there is bound to be noise mixed in. Here noise means any pixel that is not representative of audio signal. These noisy pixels, when getting into our process chain, would hardly be removable. See Detail.
- A possible better way of audio extraction from groove edges would be to perform a fairly dense angular sampling in the beginning instead of trying to perform traditional edge detection; then downsample the result at an audio rate during the fitting process.
- See the image below, it can be observed that pixel edges sometimes overlap along the radial direction relative to the disc center; but only the outermost (for outer edge) or the innermost (for inner edge) should count as signal, and all the others are noises.
- Unfortunately, there is no way to distinguish them unless we do a filtering based on angular sampling right after edge detection.
- Without such filtering, they will be considered as data for the successive fitting process, which is bound to lead to problematic result.
- The high level explanation of this is that 1) the input image offers a much higher sampling rate than the output audio rate. 2) traditional image edge detection is a 2D processing, yet our desired edge detection is essentially a process of creating a special 1D database, which has its semantics.
- As a result of the above two factors, low-level edge detection will incorporate 2D edges that share no semantic meaning with our application; before such 2D data get unwrapped into 1D audio undulation, they need to be filtered out.
- Because this filtering still requires an angular sampling, it would be better to completely give up on the edge detection and do such angular sampling instead.
Subscribe to:
Comments (Atom)
