Freeform drawings provide a simple way for users to create content to graphically represent an image, idea or principle. Freeform drawings are also referred to as electronic sketches, and are generally unconstrained inputs that are specified using freeform paths to mimic a user's ability to draw on a piece of paper using a pen or pencil. In computing devices, a user may define freeform paths that are detected using touchscreen functionality of a display device (e.g., as a gesture, through use of a stylus), using a cursor control device, and so on.
Although a user may quickly input freeform paths to compose a drawing, the freeform paths are typically informal and thus not intended as a finished work. Conventional techniques have been developed to increase precision and the look-and-feel of these freeform drawings. These conventional techniques, however, typically require detailed knowledge on the part of a user and involve a significant amount of time to perform.
Aspects of the present disclosure relate to beautifying freeform input paths in accordance with paths existing in the drawing (i.e., resolved paths). In this regard, freeform input paths of a curved format can be modified or replaced to more precisely illustrate a path desired by a user. As such, a user can provide a freeform input path that resembles a path of interest by the user, but is not as precise as desired. Based on existing paths in the electronic drawing, a path suggestion(s) can be generated to rectify, modify, or replace the input path with a more precise path. In some cases, a user can then select a desired path suggestion, and the selected path then replaces the initially provided freeform input path.
To generate path suggestions for curved input paths, embodiments of the present invention describe various analytics and rules that can be applied to beautify a curved input path. In particular, upon obtaining an input path, the input path can be analyzed in accordance with one or more resolved paths (paths previously existing in the drawing) to generate path suggestions. Examples of such rules that provide path suggestions for curved input paths include arc and circle center snapping, path transformation, and transformation adjustment. Further, to enhance path suggestions for curved input paths, in some implementations, a curved input path can be divided into segments based on detected corners within the curved input path. Each segment can then be assessed using beautification rules in light of prior assessed segments and/or resolved paths to generate path suggestions associated with that particular segment and/or the entire curved input path.
This summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter.
The present invention is described in detail below with reference to the attached drawing figures, wherein:
The subject matter of the present invention is described with specificity herein to meet statutory requirements. However, the description itself is not intended to limit the scope of this patent. Rather, the inventor has contemplated that the claimed subject matter might also be embodied in other ways, to include different steps or combinations of steps similar to the ones described in this document, in conjunction with other present or future technologies. Moreover, although the terms “step” and/or “block” may be used herein to connote different elements of methods employed, the terms should not be interpreted as implying any particular order among or between various steps herein disclosed unless and except when the order of individual steps is explicitly described.
Freeform drawings, such as electronic sketches, are one of the simplest ways to visualize ideas. One key advantage is that the user is not required to have specialized knowledge of particular drawing software nor any advanced drawing skills. In practice, however, these skills may become necessary to improve the visual fidelity of the resulting drawing. Conventional techniques used to make the freeform input look more precise and polish generally require the user to have experience with drawing software. Even if the user has this experience, use of conventional drawing software could take even longer to perform than making the freeform input itself.
Further, many of such conventional techniques visually improve only straight line segments and utilize a set of basic rules to make such freeform input look more precise. Users, however, typically provide freeform input in the form of straight line segments as well as curved segments. As with making straight line freeform input look more precise, users often desire input strokes in the form of arbitrarily curved paths to also look more precise. Although some conventional implementations can recognize a curve, other existing paths are not taken into consideration to visually improve curve segments such that the curved segments appear more precise. Contemplation of other existing paths in association with an input path can enable a more interactive design for the user and provide a more precise curved path in the drawing.
Accordingly, embodiments of the present invention are directed to beautifying curved input paths in accordance with paths existing in the drawing (i.e., resolved paths). In particular, input paths of a curved format can be modified or replaced to more precisely illustrate a path desired by a user. As such, a user can provide a freeform input path that resembles a path of interest by the user, but is not as precise as desired. Based on existing paths in the electronic drawing, however, one or more path suggestions can be provided to rectify, modify, or replace the input path with a more precise path.
To generate path suggestions for curved input paths, embodiments of the present invention describe various analytics and rules that can be applied to beautify a curved input path. In particular, upon obtaining an input path, the input path can be analyzed in accordance with one or more resolved paths (paths previously existing in the drawing) to generate path suggestions.
One example used to beautify an input path is an arc and circle center snapping rule. An arc and circle center snapping rule is generally used to align a center point of an input arc or circle with a point of a resolved path. For example, a center point associated with an arc or circle might be aligned with an endpoint of another path, a center associated with another arc or circle path, a center of rotation associated with another path, a center of a polygon associated with a resolved path (e.g., polygons composed from series of line segments), etc. To align a center point of an arc or circle with a resolved path point, an adaptive distance between an input center and potential resolved path points can be evaluated. When the input center point is within an adaptive distance of a resolved path point, the input center point might be snapped or aligned with the resolved path point and the radius of the arc or circle can be adjusted. Such an adaptive search radius can be beneficial to effectively capture a user's intent. For example, arcs with small angular spans are difficult to draw precisely without a guide (e.g., users tend to draw the arc too curved). As such, the identified center of the input arc might be positioned at a distance too far apart from a desired center point. As such, adaptive expansion of the search radius increases the likelihood that an imprecise input will provide the user the expected, precise output.
Other examples used to beautify an input path include a path transformation rule and a transformation adjustment rule. A path transformation rule is generally used to generate a path suggestion(s) that is a transformation of a resolved path that is sufficiently similar to an input path. As such, upon detecting that an input path is sufficiently similar to a resolved path, for example, using an affine similarity transformation matrix, the resolved path can be transformed (e.g., using the affine similarity transformation matrix) and provided as a path suggestion.
Further, as can be appreciated, in some cases, the transformed resolved path can be adjusted to result in a more precise path suggestion. For example, assume that a transformed resolved path has a rotation of 43 degrees. In such a case, as the user may have desired to rotate the path 45 degrees, an adjusted transformation can be applied such that the path suggestion is rotated 45 degrees. At a high-level, and as described in more detail below, to determine an adjusted transformation, the transformed resolved path can be separated into components, such as a rotation, scale, and translation component. The various components can be compared to target components and, if within a threshold of similarity, the component value can be adjusted to the target component value. For instance, when the rotation component of a transformed resolved path is 43 degrees and a target component value is 45 degrees, upon determining that 43 degrees is sufficiently similar to 45 degrees, a path suggestion can be provided with a 45 degree transformation.
In some implementations, beautifying curved input paths in accordance with paths existing in the drawing (i.e., resolved paths) is performed using multi-segment path processing. Multi-segment path processing enables a single input path to be divided into segments that are separately analyzed in light of prior assessed segments and/or resolved paths. In particular, a curved input path can be segmented based on detection of corners within the curved input path. The segments can then be processed sequentially to generate one or more path suggestions using beautification rules (e.g., arc and circle center snapping rule, path transformation rule, a transformation adjustment rule, etc.) in light of previously analyzed segments and/or resolved paths. In some cases, to reduce the number of path suggestions, the number of path suggestions can be limited for each processed segment.
Although aspects of the present invention are generally described herein in relation to curved input paths, as can be appreciate, this technology can be implemented in relation to other input paths. The above concepts and others, including variations and combinations thereof, are contemplated as being within the scope of the present disclosure.
Turning now to
The computing device 102 is illustrated as including a freeform drawing component 106. The freeform drawing component 106 is representative of functionality of the computer device 102 to accept and process user inputs to form freeform drawings for display by the display device 104. A user, for example, may provide inputs using a cursor control device, gesture, stylus, and so on to define a freeform drawing for output. The freeform drawing component 106 is also illustrated as including a beautification assistant component 108 that is representative of functionality to rectify a freeform drawing input by a user in a manner that maintains simplicity and speed of freeform sketching while still taking into account geometric relations.
At a high level, beautification assistant component 108 rectifies a freeform drawing input by a user, such as input 112. Based on the user input 112, suggested drawings 114, 116, and 118 can be generated and provided to the user. Assume that the user desires the original freeform input to transform to suggested drawing 116. In such a case, the user can select suggested drawing 116 to replace the original freeform input with the suggested drawing 116.
For example, a user initially draws input line 202, which remains as is because there are no other lines that serve as a basis for adjustment. Input line 204 is then drawn, which is adjusted by the beautification assistance component 108 to form adjusted line 204′ to form a mirror image of the input line 202 through a process referred to as reflection. Input line 206 is then drawn by a user, which is then adjusted by the beautification assistant component 108 to have a symmetric curve as shown for adjusted line 206′ through arc fitting. Similarly, input line 208 is drawn by a user and adjusted by the beautification assistant component 108 to have a symmetric curve as shown for adjusted line 208′.
An input line 210 is then drawn to represent a plant leaf, which is sufficiently different from other lines and, as such, is not adjusted. Curve identity, reflection, and scaling are then used to adjust subsequent input lines 212, 214 to form adjusted lines 212′, 214′ that are based at least in part on adjusted line 210′ and, as such, mimic characteristics of the plant leaf. Thus, as the freeform drawing continues, more suitable geometric constraints emerge and are applied by the beautification assistant component 108 as suggestions, such as curve identity (e.g., stages 2, 6, 7), reflection (e.g., stages 2 and 6), and arc fitting (stages 3, 4). Thus, as is readily apparent through comparison with the input 218 and final output freeform art at the result 216, the beautification assistant component 108 supports efficient freeform drawing with results that are ready for sharing with others.
Paths or strokes, such as input path 312, can be input in any number of manners. For instance, in some implementations, a user may use a touch input to provide a path or stroke to the computing device. In other implementations, a user might use a mouse, a digital pen, or other component to input freeform paths to the computing device.
Input path 312 and resolved path(s) 314 can be received, retrieved, referenced, or otherwise accessed at any time. For example, in accordance with recognizing that a user has completed an input path, such as input path 312, data associated with the input path (input path data) and a group of resolved paths (resolved path data) can be obtained. In some cases, data for each of the resolved paths associated with the drawing might be obtained. In other cases, data for a particular set of the resolved paths associated with the drawing might be obtained. For instance, resolved paths positioned near or proximate to the input path might be referenced, resolved paths input at a time near or proximate to the time of the input path might be referenced, etc.
Upon obtaining path data, such as input path data and resolved path data, the path analyzer 304 can utilize path data to analyze input paths and/or resolved paths. Path data generally refers to any data indicating a path or stroke associated with an input path or a resolved path. For instance, path data may represent position or placement of a curved path on a drawing canvas. As another example, path data may represent a sequence of cubic Bezier curves. Although analysis of path data is generally described herein with reference to input paths and resolved paths, as can be appreciated, in some cases, the resolved paths may have been previously analyzed and such analysis data stored in a data store for reference. Using analysis from previously resolved and analyzed paths can reduce computation performed by a computing device.
In some implementations, the path analyzer 304 can analyze paths by performing corner detection, path sampling, and/or path matching. Corner detection, path sampling, and/or path matching may be performed to analyze paths (e.g., input paths) such that one or more path suggestions can be generated. As can be appreciated, in implementation, the path analyzer 304 may only perform a portion or none of corner detection, path sampling, and/or path matching, or may perform other or additional analyses of paths. For instance, depending on a particular implementation, or a particular input stroke, only path sampling and path matching may be performed.
Corner detection generally refers to analysis of a path (e.g., a freeform input path) to detect one or more corners in the path. Corner detection can be performed so that a path with multiple segments (e.g., parts of an unprocessed user input) can be processed as a whole and/or individually. In this regard, an entire input path with multiple segments, defined or split by corner features, can be analyzed to provide a path suggestion(s). Alternatively or additionally, segments defined or split by corner features of an input path can be individually processed to provide suggestion paths. By way of example, assume that a single input stroke is drawn generally in the shape of a triangle. For instance, a user may draw a triangle by way of touch input without lifting her or his finger from the touch screen until the triangle is completed, or mostly completed. In such a case, corners of the triangle can be detected to generate multiple segments for processing or evaluating. As such, once divided into segments, the path suggestion generator 306 can utilize the segments using one or more rules to generate path suggestions for the input path, as described in more detail below.
Corner detection can be applied in any manner. By way of example only, an input path drawn by a user (e.g., converted to a sequence of cubic Bezier curves) can be assessed to identify curves in the path. Identified curves can be sampled to generate sample points along the path. For example, in one implementation, a curve can be sampled with a small step size (e.g., 2 view-space pixels). In accordance with identifying sample points, a tangent vector may be calculated at each sample point, e.g., along the curve. Using successive samples, an angular turn can be calculated. For instance, using a sliding window of three successive samples, an angular turn value can be calculated at each sample position except the first and last sample point. The greatest angular turn value among the sample points of the curve may be identified or designated as a point at which to break or segment the original input sequence. Such a method can be performed at any number of identified curves (e.g., each identified curve) to generate any number of segments from a single input path. In some cases, to remove outliers, such as unwanted “hooks” at the end(s) of the input path, a segment having a length that is small in comparison to the rest of the segments can be discarded. By way of example only, a segment having a length that is less than 15% of the length-wise closest other segment can be discarded.
Path sampling generally refers to identifying points on a path as sample points for use in analyzing the path. As can be appreciated, analyzing cubic Bezier curves may be difficult. As such, in some implementations, operations may be performed on sampled paths, that is, paths of sample points. Path sampling may be performed for input paths and resolved paths. As can be appreciated, as resolved paths are established, in some cases, path sampling for resolved paths can be precomputed and stored.
Further, in some cases, to reduce the memory requirement and computational complexity of different path comparisons, path sampling can be simplified, for instance, using the Ramer-Douglas-Peucker algorithm. To this end, for a polyline p, the Ramer-Douglas-Peucker algorithm can identify a reduced version (path sample) p′ with fewer points within a given tolerance E, that is, points of p′ lie within the distance ε(e.g., ε=4 view-space pixels) of the original input path. By way of example, and with reference to
Path matching refers to determining or identifying whether one path matches another. In particular, a determination can be made as to whether an input path matches or corresponds with a resolved path. A path may match or correspond with another path if the paths are generally classified as the same shape or are different instances of the same template. For example, a path can be identified as matching if it is the same shape, but a different size, or rotated.
At a high-level, to detect that two paths match, paths can be aligned and, thereafter, evaluated for similarity between the two paths. To align paths, affine similarity transform can be used. Affine similarity transfer refers to a composition of a rotation, scale, and/or translation. Generally, with affine similarity transfer, the shape is not changed or skewed. To align paths, an affine similarity matrix that transforms one path (e.g., resolved path) to another path (e.g., an input path) as closely as possible can be identified or determined. An affine similarity matrix M may be represented as follows:
wherein s cos=s*cos θ, s sin=s*sin θ,θ represents the rotation angle, s represents the scale, and (tx, ty) represents the translation.
In some cases, to compute an affine similarity transformation matrix M that transforms one path to another, two equal length lists of points, each including N equally-spaced samples (e.g., 10 points) from the resolved path and the input path, can be used. For instance, assume that {Pi} are the points from the resolved path, and {Qi} are the points from the input path, the matrix M that minimizes the sum of squared distances E can be determined as follows:
E=Σ
i=1
N
∥P
i*M−Qi∥2 Equation 1
Such a quadratic function of variables s cos, s sin, tx, and ty can be solved as a least-squares problem over such variables. In particular, this enables selection of a matrix M so that the matrix M multiplied by the resolved path P results in the best match to the input path Q.
As can be appreciated, an affine similarity transformation matrix M can be identified for any number of input-resolved path pairs. For example, an affine similarity transformation matrix M might be determined for each resolved path with respect to an input path. To this end, if five resolved paths exist, five similarity transformation matrices may be determined, one for each of the resolved paths paired with the input path. As another example, an affine similarity transformation matrix M might be determined for a specific set of resolved paths with respect to an input path (e.g., resolved paths positioned near the input path, etc.).
As described, upon aligning paths, a similarity between paths can be determined. To determine similarity between paths, such as an input path and a resolved path, Fréchet distance, or a variant thereof, can be used. Fréchet distance is generally described as a measure of similarity between curves, which can take into account the location and ordering of points along the curves. Assume that (M,d) denotes a metric space and the path is defined as a continuous mapping f:[a, b] →M, where a, b ε, a≦b. Given two paths f:[a, b]→M and g: [a′,b′] →M, Fréchet distance δF is generally defined as:
δF(f,g)=infα,βmaxtε[0,1]d(f(a(t)),g(β(t))) Equation 2
wherein α(resp.β) is an arbitrary continuous non-decreasing function from [0,1] onto [a, b](resp.[a′, b′]. In some cases, before computing the Fréchet distance, the resolved path samples can be multiplied by the corresponding affine similarity transformation matrix M. A Fréchet distance can be calculated in association with each similarity transformation matrix M. For instance, assume that a similarity transformation matrix M is determined for each input-resolved path pair. In such a case, a Fréchet distance, or measure of similarity, can be determined for each input-resolved path pair. The measures of similarity can then be compared to one another, or measured against a threshold, to determine one or more resolved paths to which the input path is similar.
As will be described, analysis associated with corner detection, path sampling, and/or path matching can be used by the path suggestion generator 306 to generate path suggestions. A path suggestion refers to a suggestion or recommendation of a path that can replace or modify another path, such as an input path. In some cases, a path suggestion(s) can be provided as an alternative or option for an input path that is presented to a user for selection. Upon the user selecting a particular path suggestion, a corresponding path, such as an input path, can be replaced or modified to replicate the selected path suggestion. In other cases, a path suggestion(s) may be automatically implemented to modify or replace an input path. For example, an input path may be automatically converted from one curved line to another curved line without selection from a user. As can be appreciated, in such cases, the user may have the option to undo the automatic implementation.
Path suggestions can be identified or generated using any number of beautification rules. Beautification rules generally refer to rules or algorithms used to generate a suggestion for a path that might beautify, or make more precise, the path (e.g., input path). Any number of beautification rules can be accessed and used to generate path suggestions. In some cases, each rule might be applied to determine any appropriate path suggestions. In other cases, a portion of rules might be applied to determine any appropriate path suggestions. For example, assume a path is a curved path. In such a case, beautification rules associated with curved paths may be accessed and used to determine any path suggestions to generate and/or provide to a user. Beautification rules can be accessed from a rule data store.
Although input provided to each rule may differ, such input may include an input path, such as an end-to-end-connected series of Bezier curves, and a set of existing resolved paths. Input may additionally or alternatively include data provided from the path analyzer component 304. For example, an indication of detected corners, an indication of path samples, and/or an indication of path matches (e.g., resolved paths that match or are similar to an input path), etc. The particular input provided to and/or utilized by the path suggestion generator 306 may depend on the beautification rule(s) being assessed. Generally, the path suggestion generator 306 evaluates the likelihood that an input path conforms to a geometric property considering one or more resolved paths.
One beautification rule that can be applied to generate a path suggestion(s) for an input path is a path transformation rule. Path transformation refers to transforming a resolved path, by rotating, scaling, and/or translating, such that the transformed path generally aligns with an input path. A transformation that generally or substantially aligns a resolved path within to the input path can be identified. A resolved path might be generally or substantially aligned with an input path when the paths are within a predetermined threshold distance, a range, or an extent from one another. In this regard, in cases that an input path appears to be sufficiently similar to a resolved path, the resolved path can be transformed in a manner that corresponds with the input path. The transformed resolved path can then be generated as a path suggestion. By way of example only, assume a Frechet distance indicates an input path is sufficiently similar to a resolved path (e.g., as determined by the path analyzer 304). In such a case, a path suggestion of the resolved path transformed by the matrix transformation M can be generated. Using the matrix M to transform the resolved path enables generation of a suggested path that corresponds with the input path. For instance, upon computing a Fréchet distance, it can be determined that the input path is close to being a rotated, scaled, and/or translated version of a particular resolved path. As such, a path suggestion that is a rotated, scaled, and/or translated version of the resolved path can be generated such that instead of resolving a freeform input path as input, the transformed version of the resolved path can replace the freeform input path.
Another beautification rule that can be applied to generate a path suggestion(s) for an input path is a transformation adjustment rule. A transformation adjustment refers to a modification(s) being performed to a transformed path to create symmetries, align paths, and/or equalize spacing. In this regard, when two paths are similar to one another, a transformation adjustment can be applied to improve the preciseness of a path (e.g., an input path). As such, for an input path and a resolved path of the same shape, a transformation adjustment can be performed to provide a path suggestion for the input path. For example, assume that one path is determined to be 1.1 times the size of another path. Being exactly the same size, however, may be more precise and, accordingly, provided as a path suggestion.
To generate a path suggestion in the form of a transformation adjustment, in instances that an input path is similar to a resolved path, a transformed path that generally aligns with an input path (by way of rotation, scale, and/or translation of a resolved path) is adjusted. As such, to determine a path suggestion(s) based on transformation adjustments, a matrix M that transforms a resolved path to correspond, or align, with an input path, can be separated into rotation, scale, and translation components as follows:
rotation=a tan 2(s sin,s cos)
scale=√{square root over (s cos2+s sin2)}
translation=(tx,tx)
A transformation, or matrix transformation, can be adjusted in various ways to generate any number of suggestions, for instance, using the rotation component, the scale component and/or the translation component. As is described, various adjustments may include rotation snapping, scale snapping, translation snapping, step-transform snapping, and/or reflection-axis snapping.
Rotation snapping refers to a rotation adjustment to a transformation (transformation of a resolved path) to generate a path suggestion. To determine a rotation adjustment to apply, the rotation component associated with the transformation of a resolved path can be used. In some embodiments, if the rotation component is close to or about an angle that is an integral divisor of 2π, an adjusted transformation can be applied accordingly so that a path suggestion is provided with that precise angle (e.g., 45 degrees). For example, assume that the rotation component associated with a path transformation is 43 degrees. Because 43 degrees is about 45 degrees, an integral divisor of 2π, the path transformation can be adjusted to 45 degrees to provide a path suggestion that has an angle of 45 degrees. Such a path suggestion can be beneficial to the user as the user may have intended to provide a freeform input with a 45 degree angle.
Scale snapping refers to a scale adjustment to a transformation (transformation of a resolved path) to generate a path suggestion. To determine a scale adjustment to apply, the scale component associated with the transformation of a resolved path can be used. In some embodiments, if the scale component is close to or about an integer or half an integer, an adjusted transformation can be applied accordingly so that a path suggestion is provided with that precise scale (e.g., multiple of integer or half integer). For example, assume that the scale component associated with a path transformation is 1.9. Because a scale of 1.9 is close to the integer 2, the path transformation can be adjusted to a scale of 2 to provide a path suggestion having a scale of 2. Such a path suggestion can be beneficial to the user as the user may have intended to provide a freeform input that is twice the scale of an existing path. Any threshold value can be used to determine whether the scale component is sufficiently close to a target scale (e.g., integer or half integer). Further, although an integer and half integer are used herein as a target scale for assessing and performing scale snapping, as can be appreciated, any scales can be designated (e.g., quarter integers, etc.).
Translation snapping refers to a translation adjustment to a transformation (transformation of a resolved path) to generate a path suggestion. To determine a translation adjustment to apply, a component(s) associated with the transformation of a resolved path can be used. In some embodiments, translation snapping can take several forms. As one example, if the transformation includes a rotation component, a rotation center is identified and compared to existing points in the drawing. If the rotation center is sufficiently close to an existing point, the translation is adjusted to place the center of rotation at that point. As another example, if the transformed path is a reflected version of a resolved path, the axis of reflection is computed and, thereafter, the resolved path is reflected across this axis. If the path is sufficiently close to this reflected path, we adjust the translation to move it to that position. As yet another example, the x and/or y components of the translation can be adjusted to zero (or other target value, such as a half integer). For instance, assume that the translation component associated with a transformed path is (100, 3). In such a case, the user may have desired to translate a curved path input by 100 in the lateral direction, but have the same y-coordinate such that two paths are aligned. Accordingly, the translation can be adjusted to (100, 0). Such a path suggestion can be beneficial to the user as the user may have intended to provide a freeform input that represents a particular translation. Any manner or number of rules can be applied to determine translation adjustments for generating path suggestions.
Step-transform snapping enables creation of multiple, equally transformed copies of a path. For example,
By way of example, and with reference to
Reflection-axis snapping is used to reflect paths against an axis of reflection or to reflect a path across an existing line segment. For example,
Another beautification rule that can be applied to generate a path suggestion(s) for an input path is an arc and circle center snapping rule. An arc and circle center snapping rule is generally used to align a center point of an arc or circle with a point of a resolved path. For example, a center point of an arc or circle might be aligned with an endpoint of another path, a center associated with another arc or circle path, a center of rotation associated with another path, a center of a polygon associated with a resolved path (e.g., polygons composed from series of line segments), etc. To align a center point of an arc or circle with a resolved path point, the distance between an input center and potential resolved path points can be evaluated. When the input center point is within a threshold distance of a resolved path point, the input center point might be automatically snapped or aligned with the resolved path point and the radius of the input arc or circle might be adjusted. In another case, when the input center point is within a threshold distance of a resolved path point(s), a suggestion to snap or align the input center point with the resolved path point may be provided to a user.
In some implementations, a predetermined threshold distance may be applied to determine if the input center point is within a threshold distance of a resolved path point. For instance, a standard search distance radius D may be assessed to determine if the input center point is within the distance radius D relative to a resolved path point. In another implementation, a threshold distance can be dynamically determined and used to determine if the input center point is within the dynamically determined threshold distance. Such an adaptive search radius can be beneficial to effectively capture a user's intent. For example, arcs with small angular spans are difficult to draw precisely without a guide (e.g., users tend to draw the arc too curved). As such, the identified center of the input arc might be positioned at a distance too far apart from a desired center point. In the event a fixed threshold distance D is used to assess whether the center of the input arc is within the distance D of a resolved path point, the center of the input arc might not be aligned with a desired resolved path point. As a result, adaptive expansion of the search radius D′ increases the likelihood that an imprecise input will provide the user the expected, precise output.
For example, and with reference to
Various methods may be employed to adaptively modify a threshold distance for assessing whether to align an input center point with a resolved path point. In some cases, an adaptive threshold might be determined such that the search radius or threshold distance becomes larger as the span of the arc (e.g., θ) becomes smaller. As one example, the adaptive threshold D′ can be determined as follows:
2r(1−θ/2π) Equation 3
wherein θ is the span of the input arc, and r is its radius. θ/2π refers to a fraction of a circle. As such, if θ equals π, θ/2π is ½ a circle. As can be appreciated, 1−θ/2π approaches 1 as the arc gets smaller.
In some cases, the adaptive threshold might be a selection between D′ or D. For example, a maximum distance of D or an adaptive distance D′ (e.g., 2r(1−θ/2π)) might be selected for use in assessing distance between an input center path and a resolved path point, as shown below:
wherein θ is the span of the input arc, r is its radius, and D is the standard or predetermined search distance radius. In one implementation, a value for D of 30 view space pixels is used.
As previously described, other beautification rules can be applied to generate a path suggestion(s) for an input path. For example, other beautification rules may include line detection, arc detection, endpoint snapping, end tangent alignment, line parallelism and perpendicularity, line length equality, and path offset, etc. For the line detection rule, line straightness is estimated by measuring a ratio between length of a path and a distance between its endpoints. For the arc detection rule, an input path is sampled and a least-squares circle fit is performed on the samples to obtain center and radius parameter values. To determine the angular span value, the samples are projected onto the circle fit. The arc can then be sampled again and the discrete Fréchet distance evaluated between the arc samples and the samples of the input path. When the span is close to 2π or the path is closed, it is replaced with a full circle.
For the endpoint snapping rule, a distance between each of the path endpoints and resolved endpoints is examined Additionally, snapping to inner parts of the resolved paths is also examined. Specialized tests based on the properties of line segments and circular arcs lower the computational complexity of this operation. For the end tangent alignment rule, if the path endpoint is snapped, the angle between its tangent and the tangent of the point to which it is attached is measured. If the tangents are sufficiently close, the path is adjusted to make the attachment smooth.
For the line parallelism and perpendicularity rule, the angle between two line segment paths is compared with the angle needed to satisfy the parallelism or perpendicularity constraint. The distance taken between the line segments is also taken into account to slightly increase the priority of nearby paths. For line length equality, the ratio of length of both tested line segments is evaluated. The mutual distance is incorporated into a final likelihood computation. For the path offset rule, offset paths generalize line parallelism. To detect these paths, the beautification assistant module 108 progresses along the path and measures its distance to the resolved path.
In accordance with embodiments of the present invention, the path suggestion generator 306 can generate path suggestions based on single-segment path processing and/or multi-segment path processing. Single-segment path processing refers to processing a path (e.g., input path) based on a single segment. In some cases, a single segment is a segment without any corners detected in the segment. In other cases, a single segment can be processed irrespective of having detected corners. For instance, an entire path with multiple segments, defined or split by corner features, can be processed as a single segment to provide a path suggestion(s). Single-segment path processing can utilize any number of the beautification rules described above with respect to a single-segment path to generate a path suggestion(s).
Multi-segment path processing refers to processing a path (e.g., input path) based on a multiple segments. In some cases, multiple segments can be detected based on corner detection, as described above. In this regard, segments defined or split by corner features of an input path can be individually processed to provide suggestion paths. By way of example, assume that a single input stroke is drawn generally in the shape of a triangle. For instance, a user may draw a triangle by way of touch input without lifting her or his finger from the touch screen until the triangle is completed, or mostly completed. In such a case, corners of the triangle can be detected to generate multiple segments for processing or evaluating. As such, once divided into segments, the path suggestion generator 306 can utilize the segments along with one or more beautification rules to generate path suggestions for the input path. To this end, the path suggestion generator 306 provides path suggestions based on multiple segments of a single stroke (e.g., input path). Such an implementation can provide more accurate path suggestions as opposed to requiring a user to draw every segment independently (e.g., draw a 1st stroke, draw a 2nd stroke, and draw a 3rd stroke to complete a triangle).
As described, multi-segment path processing enables processing of paths with multiple segments. For example, assume that one input path is drawn by a user and, upon detecting a corner (e.g., via path analyzer 304), the path suggestion generator 306 can process the multiple segments using one or more beautification rules. In some implementations, segments of the path, such as an input path, can be processed one at a time to generate one or more path suggestions to provide as output. For example, a first segment can be assessed to determine a first set of path suggestions; a second segment can then be assessed to determine a second set of path suggestions, and so on. The second set of path suggestions might be in addition to the first set of path suggestions. In other cases, the second set of path suggestions modify the first set of path suggestions based on the assessment of the second segment. For instance, processing multi-segment input may include automatic selection of intermediate path suggestions.
As the number of potential path suggestions can increase significantly as multiple segments are analyzed, in some implementations, the path suggestions can be reduced to make the evaluation of complex inputs computationally feasible within real-time-to-interactive response time. To reduce the number of path suggestions, a threshold number of unique suggestions can be applied. For instance, in some cases, after analyzing each of the segments, the total number of path suggestions may be limited (e.g., 10 path suggestions). In other cases, the number of unique suggestions for each segment can be limited (e.g., 3 path suggestions for each segment or segment addition). Alternatively or additionally, the individual segments can be processed in a breadth-first manner that enables reduction once all the parallel states reach the same depth (i.e., all have the same number of processed segments). Each intermediate state can be assigned a value that is calculated as the arithmetic mean of the scores of the processed segments. NIS intermediate states can be further analyzed while the remaining intermediate states are discarded. The performance of multi-segment path processing may be determined by the number of segments K and the intermediate stack size NIS, with NIS=1 being performance-wise equal to sequential processing of individual segments.
As can be appreciated, as the individual segments are associated with a single path (e.g., an input curve), the beautified proposed segments can be consecutively joined to constrain the position of the first end point of each segment after the first segment. Additionally, if the multi-segment path is closed, the last segment's final endpoint can be constrained, which can decrease ambiguity.
By way of example only, and with reference to
The path provider 308 is generally configured to provide a set of one or more path suggestions. As illustrated in
The presentation of path suggestions can occur in any manner In some cases, multiple path suggestions are simultaneously presented. In other cases, path suggestions are subsequently presented such that only one suggestion is presented at a time. In such a case, a user may switch among path suggestions, for example, using a tool panel. The first path suggestion may be a suggestion associated with a greatest or highest path score, while a last suggestion may be the original input path. A user may select a currently presented suggestion in any manner, such as by drawing a new input path or changing a selection. In some cases, to provide assistance to a user, a simple visualization of applied beautification rule(s) can be provided along with the suggested path. Such a visualization can provide feedback to the user about imposed constraints and relations of the user input. For example, with reference to
In some cases, the path provider 308 can select one or more path suggestions to provide based on a corresponding path score for path suggestions. Such a score can be generated or determined by any component, such as the path suggestion generator 306 (e.g., in association with a beautification rule(s)), the path provider 308, or another component. A path score can represent a likelihood that a suggested path is correct or intended by a user. For example, a same-line-length rule might, for input that is a line segment, create path suggestions that are the same lengths as existing line segments, along with scores that indicate how close the segment's initial length is to the modified length of the corresponding path suggestion. As such, in some cases, the scores may reflect an amount of adjustment performed by respective rules to achieve a respective path suggestion. In some cases, each rule may include a threshold that determines that the score for a path suggestion is too low and, in that case, does not output a suggested path.
The path scores can be compared to one another and/or to a threshold score to determine which path suggestions to provide to a user. For example, for a particular beautification rule, path scores associated with path suggestions derived from the particular beautification rule can be compared to one another to select one or more path suggestions to provide to a user. As another example, path scores associated with path suggestions derived from various beautification rules can be compared to one another to select one or more path suggestions to provide to a user.
Path scores can be determined in any number of ways and may vary depending on the particular beautification rule being applied. In some cases, multiple prior instances of an aspect may strengthen the likelihood a user intended a particular path. For example, with respect to a transformed path, if the drawing includes multiple instances of a path, it is more likely that the user intended a new input path to match the previously resolved paths. As such, a score for a suggested transformed path may be boosted by replacing or modifying the score with 1−(1−s)ln i, where i is the number of existing instances. As another example, with respect to reflection axis snapping, for an axis that has been used multiple times for path reflection, it is more likely that the user intended a new input path to be reflected via that axis. According, a score for a suggested transformation adjustment may be increased by replacing or modifying the score with 1−(1−s)ln i, where i is the number of instances the axis has been used.
Referring now to
Initially, at block 1102, an arc input path is obtained. An arc input path can be provided by a user, for example via a touch screen, and obtained by a beautification assistant component (e.g., beautification assistant component 302 of
Referring now to
At block 1208, a determination is made as to whether the similarity between the resolved path and the curved input path exceeds a similarity threshold. In such a case, it might be determined if a similarity measure is greater than a predetermined similarity threshold or if a similarity measure is greater than other similarity measures associated with other input-resolved path pairs. If it is determined that the similarity between the resolved path and the curved input path does not exceed a similarity threshold, the method ends, as indicated at block 1210. On the other hand, if it is determined that the similarity between the resolved path and the curved input path does exceed a similarity threshold, a suggested path is generated in the form of the resolved path transformed by the identified transformation that aligns a resolved path with the curved input path. This is shown at block 1212. At block 1214, the suggested path is provided as a path suggestion to the user via a user device.
Referring now to
With reference to
Turning now to
Computing device 1500 typically includes a variety of computer-readable media. Computer-readable media can be any available media that can be accessed by computing device 1500 and includes both volatile and nonvolatile media, removable and non-removable media. By way of example, and not limitation, computer-readable media may comprise computer storage media and communication media. Computer storage media includes both volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules, or other data. Computer storage media includes but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVDs) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by computing device 1500. Computer storage media does not comprise signals per se. Communication media typically embodies computer-readable instructions, data structures, program modules, or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. The term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared, and other wireless media. Combinations of any of the above should also be included within the scope of computer-readable media.
Memory 1512 includes computer-storage media in the form of volatile and/or nonvolatile memory. The memory may be removable, non-removable, or a combination thereof. Exemplary hardware devices include solid-state memory, hard drives, optical-disc drives, etc. Computing device 1500 includes one or more processors that read data from various entities such as memory 1512 or I/O components 1520. Presentation component(s) 1516 present data indications to a user or other device. Exemplary presentation components include a display device, speaker, printing component, vibrating component, etc.
I/O ports 1518 allow computing device 1500 to be logically coupled to other devices including I/O components 1520, some of which may be built in. Illustrative components include a microphone, joystick, game pad, satellite dish, scanner, printer, wireless device, etc. The I/O components 1520 may provide a natural user interface (NUI) that processes air gestures, voice, or other physiological inputs generated by a user. In some instances, inputs may be transmitted to an appropriate network element for further processing. An NUI may implement any combination of speech recognition, touch and stylus recognition, facial recognition, biometric recognition, gesture recognition both on screen and adjacent to the screen, air gestures, head and eye tracking, and touch recognition associated with displays on the computing device 1500. The computing device 1500 may be equipped with depth cameras, such as stereoscopic camera systems, infrared camera systems, RGB camera systems, and combinations of these, for gesture detection and recognition. Additionally, the computing device 1500 may be equipped with accelerometers or gyroscopes that enable detection of motion. The output of the accelerometers or gyroscopes may be provided to the display of the computing device 1500 to render immersive augmented reality or virtual reality.
The present invention has been described in relation to particular embodiments, which are intended in all respects to be illustrative rather than restrictive. Alternative embodiments will become apparent to those of ordinary skill in the art to which the present invention pertains without departing from its scope.