文档库 最新最全的文档下载
当前位置:文档库 › Efficient Binary and Run Length Morphology and its Application to Document Image Processing

Efficient Binary and Run Length Morphology and its Application to Document Image Processing

Efficient Binary and Run Length Morphology and its Application to Document Image Processing
Efficient Binary and Run Length Morphology and its Application to Document Image Processing

E?cient Binary and Run Length Morphology and its Application to Document Image Processing

Thomas M.Breuel

DFKI and U.Kaiserslautern

tmb@iupr.dfki.de

Abstract

This paper describes the implementation and evaluation of an open source library for mathematical morphology based on packed binary and run-length compressed images for document imaging applications.Ab-stractions and patterns useful in the implementation of the interval oper-ations are described.A number of benchmarks and comparisons to bit-blit based implementations on standard document images are provided.1Introduction

Binary morphology is an important and widely used method in document im-age analysis,useful for tasks like image cleaning and noise removal,[24]layout analysis,[23]skew correction,[15]and text line ?nding.[6]Real-world doc-ument analysis systems currently primarily rely on bit blit-based implementa-tions.Practical implementations take advantage of separability and logarithmic decomposition of rectangular structuring elements [19,4,15].

This technical report describes a binary morphology library containing both a run-length and a packed binary implementation of morphological operations.A number of the methods described in this paper are very similar to methods described in the literature [13,19],although the library was developed inde-pently of that literature.The paper will not provide a detailed discussion of the similarities and di?erences of the algorithms described in this memo to those in the literature 1This memo does provide a number of benchmarks that should help practitioners choose good algorithms for their particular applications.We note that,in addition to run length and packed binary methods,a num-ber of other methods have been described in the literature.Binary mathematical morphology with convex structuring elements can be computed by propaga-tion of distances on the pixel grid using a dynamic programming algorithm [22](brush?re algorithms).Another class of algorithms is based on contours [21]and loop and chain methods [22].The van Herk/Gil-Werman algorithms [20,10,9]1Comments and additional references to prior work would be appreciated,however.

1a r X i v :0712.0121v 1 [c s .G R ] 2 D e c 2007

have constant per-pixel size overhead for grayscale morphology,and binary mor-phology can be viewed as a special case.Another class of algorithms is taking advantage of anchors,[8].Although some of these algorithms are competitive for gray scale morphology,they have not been demonstrated to be competi-tive with high quality bit blit-based implementations for binary morphology on packed binary representations[4].

Some authors have looked again at grayscale morphology,using more com-plex intermediate representations[7].It remains to be seen how such algorithms compare to the algorithms in this paper,both in performance and storage;we will not be addressing that question here.

Bit blit-based implementations at their lowest level take advantage of opera-tions that are highly e?cient on current hardware because they are used as part of many di?erent algorithms and display operations:their running time grows quadratically in the resolution of the input image;they do not take advantage of coherence in the input image–an almost blank image takes the same amount of time to process as a highly detailed image;and operations that need to take into account the coordinates of individual pixels(e.g.,connected component la-beling)often need to decompress(at least on the?y)or use costly pixel access functions.

We will mostly limit ourselves in this paper to the development of morpho-logical operations involving rectangular structuring elements.These are by far the most common operations in document image analysis.However,the run-length method can also be used for implementing morphological operations for arbitrary masks;algorithms and performance will be given in a separate paper.

Converting between run length and non-run length representations can be carried out fairly quickly,so we also have the option of mixing run-length and bitmap representations.However,many binary image processing algorithms can be implemented directly on run length images.In fact,prior work in image processing on the line adjacency graph and algorithms operating on it are di-rectly transferable.We therefore brie?y discuss a number of these algorithms. Taken together with the binary morphology operations in this paper,they allow complete binary image processing pipelines to be built on run length images, with no conversion costs.

Finally,we give benchmarks and comparisons with the Leptonica library, an open source library for morphological image processing.It has compara-tively good performance,uses well-documented algorithms,and is used in sev-eral large-scale document analysis systems.

2Run Length Image Coding

Run-length image representations have a long history in image processing and analysis.They have been used,for example,for e?cient storage of binary and color images and for skeletonization of large images.

Consider a1D boolean array a containing pixel values0and1at each location a i.The run length representation r is an array of intervals r1=

2

[s1,e1],...,r n=[s n,e n]such that a i=1i?i∈r j for some j and e i

The2D run-length representation we are using in this paper is a straight-forward,extension to2D that treats the two coordinates asymmetricaly;in particular,the binary image2a ij is represented as a sequence of one-dimensional

run-length representations r ij,such that for any?xed i0,the1D array a j=a i

0,j

is represented by the1D runlength representation r j=r i

0j .

Even algorithms that are not explicitly using run length representations are often still implicitly manipulating runs of pixels internally;for example,the usual connected component labeling algorithm internally considers neighbor-hood relations between runs of pixels.An extended version of2D run-length representations has been used as the line adjacency graph(LAG);it adds a graph structure encoding neighborhood relations between runs to the basic run length encoding;in our algorithms,these neighborhood relations are simply inferred dynamically.

In practice,since all the algorithms described in this paper access runs se-quentially,both linked lists or extensible arrays with exponential doubling can be used to represent the runs of each line;our implementation uses extensible arrays with exponential doubling,which results in fewer calls to the memory al-locator,less average memory usage,and better locality of reference than linked list representations.In our current implementation,each run is represented as a pair of16bit integers,allowing images up to approximately65535×65535 to be represented;other,more e?cient coding schemes are possible(e.g.,using a Unicode-like variable length encoding).Note that,in the worst case,that of alternating black and white pixels,the run-length representation may be up to 16times bigger than a packed bit representation,or a factor of two compared to a one-byte-per-pixel representation.

On the other hand,run-length encoded images scale linearly with image resolution,rather than quadratically.That is,a1200dpi binary image takes approximately4times as much space than a300dpi binary image using run-length encoding,while a packed bit image would take16times as much space. 3Morphological Operations

Because of the asymmetry in the two dimensions of the2D run-length represen-tation we are using,morphological operations behave di?erently in the x and y direction in run-length representations.An analogous asymmetry is found in bit-blit operations,in which the bits making up image lines are packed into words,and a list of lines represents the entire image.There are multiple pos-sible approaches for dealing with this issue.First,we can implement separate operations for horizontal and vertical operations.Second,we can implement only the within-line operations and then transform the between-line operations into within-line operations through transposition.For separable operations,the 2This paper and our library uses PostScript/mathematical conventions,with a0,0repre-senting the bottom left pixel of the image.

3

second approach is often the easier one.Therefore,an erosion with a rectangular structuring element of size u×v can be written as:3

function erode2d(image,u,v)

erode1d(image,u)

transpose(image)

erode1d(image,v)

transpose(image)

end

4Within-Line Morphological Operations

There are four basic morphological operations we consider:erosion,dilation, opening,and closing.One-dimensional opening and closing are the easiest to understand.Essentially,a one-dimensional opening with size u simply deletes all runs of pixels that are less than size u large,and leaves all others untouched:4 void open1d(image,u){

for i in1,length(image.lines)do

line=image.lines[i]

filtered=[]

for j in1,length(line.runs)do

if runs[j].width()>=u then

filtered.append(line.runs[j])

end

image.lines[i]=filtered

end

end

A one-dimensional closing with size u deletes all gaps that are smaller than size u,joining the neighboring intervals together.It can either be implemented directly,or it can be implemented in terms of complementation and opening5 function complement(image)

for i in1,length(image.lines)do

line=image.lines[i]

filtered=[]

last=0

for j in1,length(line.runs)do

run=line.runs[j]

newrun=make_run(last,run.start)

filtered.append(newrun)

3Our convention is output arguments before input arguments,and the various procedures modify the image in place.

4We are using1-based arrays in the pseudo-code.

5To simplify boundary conditions,we are using the notation exp1or exp2to mean use the value of exp1if it is de?ned,otherwise use exp2.

4

last=run.end

end

filtered.append(make_run(last,maxint))

image.lines[i]=filtered

end

end

function close1d(image,u)

complement(image)

open1d(image)

complement(image)

end

Note that openings and closing are not separable,so we cannot use these imple-mentations directly for implementing true2D openings and closings;for that, we have to combine erosions and dilations.However,even as they are,these sim-ple operations are already useful and illustrate the basic idea behind run-length morphology:run-length morphology is selective deletion and/or modi?cation of pixel runs.

The most important operation in run-length morphology is one-dimensional erosion.Like one-dimensional opening,we walk through the list of runs,but instead of only deleting runs smaller than u,we also shrink runs larger than u by u/2on each side(strictly speaking,for erosions on integer grids,we shrink by ?oor(u/2)on the left side and u??oor(u/2)on the right side during erosions), and use the opposite convention for dilations).In pseudo-code,we can write this as follows:

function erode1d(image,u)

for i in1,length(image.lines)do

line=image.lines[i]

filtered=[]

for j in1,length(line.runs)do

if runs[j].width()>=u then

start=runs[j].start+u/2

end=runs[j].end-u/2

filtered.append(make_run(start,end))

end

image.lines[i]=filtered

end

end

As with opening/closing,dilation can be implemented directly or via comple-mentation:

function dilate1d(image,u)

complement(image)

erode1d(image)

5

complement(image)

end

In terms of computational e?ciency,obviously,all these operations are linear in the total number of runs in the image.

5E?cient Transpose

Transposition means that we need to construct runs of pixels in the direction perpendicular to the current run-length encoding.A simple way of transposing is to essentially decompress each run individually and then accumulate the de-compressed bits in a second run length encoded binary image[1,14].For this, we maintain an array of currently open runs in each line of the output image and iterate through the runs of the current line in the input image.For the range of pixels between the runs of the current line in the input image,we?nish o?the corresponding open runs in the output image.For the range of pixels overlapping the runs of the current line in the input image,we start new runs for lines where runs are not currently open and continue existing open runs for lines where runs are currently open.In terms of pseudo code,that looks as follows:

function transpose_simple(image)

output=make_rle_image()

open_runs=make_array(new_image_size)

for i=1,length(image.lines)do

line=image.lines[i]

last=1

for j=1,length(line.runs)do

run=line.runs[j]

for k=last,run.start do

newrun=make_run(open_runs[k],i)

output.lines[k].append(newrun)

open_runs[k]=nil

end

for k=run.start,run.end do

if open_runs[k]==nil then

open_runs[k]=i

end

end

last=run.end

end

end

...finish off the remaining runs here...

end

This simple algorithm is usable,but it does not take advantage of the coherence between lines in the input image.To take advantage of that,we need a more

6

Figure1:The?gure illustrates a merge step during the transposition step.The algorithm maintains a list of open intervals and information about how many steps that interval has been open for.It then considers the next run-length encoded line in the input.Ranges in the input that do not overlap any intervals in the new line are?nished and give rise to runs in the output.Ranges in the input that overlap runs in the next line give rise to intervals in the open line that have their step number incremented by one.Ranges in next line that do not correspond to any range in the list of open intervals give rise to new intervals with their step values initialized to one.

complicated algorithm;the algorithm is somewhat similar to the rectangular sweeping algorithm used for?nding maximal empty rectangles[3].

The basic idea behind the transposition algorithm is to replace the array of open runs in the above algorithm with a list of runs,each of which represents an open run in the perpendicular direction.This is illustrated in Figure1.The actual inner loop is similar to the algorithm shown above for the per-pixel up-dating,but because of the13possible relationships between two closed intervals, the inner loop contains a larger case statement;this will not be reproduced here. This new run length transposition algorithm speeds up the overall operation of the binary morphology code several-fold relative to the simple decode-recode implementation.

6Between Line Boolean Operations

A bit blit based implementation of mathematical morphology uses as its prim-itive an operation that performs a logical operation(AND,OR,XOR,AND-NOT,OR-NOT,NAND,NOR,etc.)between the pixels of two images,allowing for relative shifts(see also[25]).We can implement the same operations in our library.The general idea is to consider the runs in the two source lines from left to right and merge them together.For example,if the operation is AND,then this means deleting any run in either of the two input lines that does not overlap

7

a corresponding run in the other line.Because of the13possible relationships between intervals,this is fairly complicated.However,there is a pair of useful abstractions that greatly simpli?es the implementation of these kinds of inter-val merging operations.6Basically,instead of considering lines as collections of runs,we consider them as collections of transitions from black to white and from white to black.We operate on those collections using two simple abstractions:?A TransitionSource returns locations of transitions in ascending order, indicating for each transition whether it is from black to white or from white to black.

?A TransitionSink accepts locations of transitions in ascending order and re-assembles them into intervals.

With these abstractions,the main loop of line and becomes simply(in C++): TransitionSink sink(out,total);

TransitionSource src1(l1,0);

TransitionSource src2(l2,offset2);

int where=MININT;

bool b1=false;

bool b2=false;

while(src1||src2){

if(src1.coord()

b1=src1.value();

where=src1.coord();

src1.next();

}else{

b2=src2.value();

where=src2.coord();

src2.next();

}

sink.append(where,b1&&b2);

}

The simpli?cation of the code results from the fact that the main loop becomes a simple ordered merge of lists of numbers,and the sink data structure takes care of the di?erent cases;for example if it receives a sequence of transitions (x0,F),(x1,T),(x2,T),(x3,F),(x4,F),it will generate a run from x1to x3. Boundary conditions are additionally simpli?ed because the TransitionSource returns a big integer after running out of locations,which eliminates separate code after the main loop to?nish o?the un?nished line when the other line has run out of transitions.

6A similar technique can be applied to the transpose operation above,but that operation was written by considering the di?erent possible cases directly.

8

7E?cient Binary Decompositions

Binary decomposition of linear structuring elements is a widely used tech-nique for real-world,fast binary morphology.For reviews of the technique, see[19,4,15].We can combine the“bit blit-like”operations above with binary decomposition for an alternative approach to binary morphology on run-length images.

Generally,a linear structuring element of length n can be decomposed into nS=S⊕E(S)⊕E(2S)⊕···⊕E(2m?1S)⊕E((n?2m?1)S)(1) A simple example of this is the decomposition of the8L0structuring element[15]:

8L0={???}⊕{???}⊕{?????}⊕{?????????}(2) This involves9pixels,and hence9blit operations in a straightforward bit blit implementation.This represents a signi?cant savings over the original19 pixels of the linear structuring element,but it does not represent the optimal decomposition of a structuring element of19pixels,which requires just5blit operations:

width=1;

while(2*width

bits_and(image,image,width,0);

width*=2;

}

if(width

To center the operation properly,we need to shift the image prior to these operations.The overall cost of decomposing a line structuring element therefore is a shift operation plus log r ,where r is the width of the structuring element in pixels.In the run length morphology library,this approach is applied to the between-line morphological operations.

An alternative loop avoids the initial shift,which causes some undesirable behavior at the image border.The idea is to perform exponential doubling to cover at least half of the right half of the structuring element,and then?nish of the operation with three more operations(overall,this requires one extra blit relative to the simple version above):

width=1;

while(2*width

bits_and(image,image,width,0);

width*=2;

}

if(width

bits_and(image,image,-(r-r/2),0);

if(width

.

9

82D Morphological Operators for Rectangular Masks

Given the three operations developed above,within-line morphological oper-ations,transpose,between-line binary operations,and logarithmic binary de-composition,as well as the separability property of rectangular masks,we now have various di?erent ways of composition2D morphological operators using rectangular structuring elements:

?“brute force”implementation:this simply performs a shifted AND or OR operation for each pixel in the mask,quite analogous to a brute-force bit blit implementation;this is a slow operation useful for reference and veri?cation

?transpose and within-line operations:we?rst perform morphology along the within-line direction,then transpose,then perform morphology again, and then transpose back

?within-line and between-line operations:we perform morphology along one direction using the within-line operators,and along the other direction using logarithmic decomposition and between-line operations;this can be carried out in either order

It is not a priori obvious which of these choices is the most e?cient,but it turns out experimentally that the last one works fastest for document images. Furthermore,it is important to carry out the within-line operations before the between-line operations because the former are far more e?cient when coping with images with many runs.We will return to this issue in the experimental section.

9Morphology with Arbitrary Masks

Many structuring elements in practice are handled as arbitrary bitmasks,using a straightforward loop such as:

for(i=0;i

if(element(i,j)==0)continue;

bits_and(result,image,-i+cx,-j+cy);

count++;

}

Obviously,loops like that grow linearly in the number of pixels in the structuring element.

Fortunately,for run-length encodings,we can perform these operations a run at a time,rather than a pixel at a time.Essentially,for each run in the mask,we perform the operation on a copy of the image,then apply the result to an accumulator image,which we?nally return.

10

for(run in horizontal_runs(element)){

temp=copy(image);

erode_line_horizontal(temp,run.x,run.y0,run.y1);

bits_and(result,temp)

count++;

}

Of course,for run length morphology,we can carry out erode_line_horizontal

directly.

For bit blit morphology,the naive implementation would use binary de-

composition to compute erode_line_horizontal separately for each run.For completeness(and because it is implemented in the companion bit blit-based operations)let us observe that such an approach involves many unnecessary

copies and recomputations of intermediate results;the overall complexity is

#runs·log(max run width).A better way to perform decomposition of arbi-

trary masks is to accumulate longer and longer horizontal structuring elements

and apply them as needed.The following simple pseudocode illustrates the idea

(it assumes that the structuring element has been?ipped prior to the compu-

tation;maxwidth is the maximum run width):

temp=copy(image);

for(width=1;width

for(run in runs_of_element){

run_width=run.y1-run.y0;

if(run_width>=width&&run_width<2*width){

bits_and(image,temp,run.x,run.y0);

if(run_width>width)bits_and(image,temp,run.x,run.y1-run_width-1);

}

}

}

For a circle of radius r,this involves at most2r+ log maxwidth calls to the

bits_and function,plus a copy.A separate shift is not needed to center the

result since the runs themselves can be o?set appropriately.

10Scaling,Skewing,and Rotation

Scaling,skewing,and rotation are other important operations in document im-

age analysis,used during display and skew correction.

Scaling can be implemented by scaling the coordinates of each run and scal-

ing up or down the array holding the lines by deleting or duplicating line arrays.

Scaling can also be implemented as part of the conversion into an unpacked rep-

resentation(as required by,for example,window systems).

Skew operations can be implemented within each line by shifting the start

and end values associated with each run.Bitmap rotation by arbitrary an-

gles can then be implemented by the usual decomposition of rotations into a

11

sequence of horizontal and vertical skew operations,using successive applica-tion of transposition,line skewing,and transposition in order to achieve skews perpendicular to the lines in the run-length representation.We note that this method di?ers substantially from previously published rotation algorithms for run length encoded images[26,2].

11Morphology with Lines at Arbitrary Orien-tations

Finally,let us look at one more case related to lines:morphological operations with linear structuring elements at arbitrary angles.A number of papers have been written about this,using di?erent approaches.Oddly enough,few if any of the papers appear to reference the most obvious approach:bitmap rota-tion followed by an axis-aligned structuring element;this would at least be an important control experiment[17,18]:

bits_erode_line(image,r,angle){

bits_rotate(image,angle);

erode_line_horizontal(image,2*r);

bits_rotate(image,-angle);

}

The rotations can be composed from three skew operations,as for general bitmap rotations.In fact,the same approach also works for rotated rectan-gles.

However,a rotation of a horizontal line segment will give rise to a rotated line segment whose bits di?er slightly from the bits generated by rendering a digital line segment at that angle using the true linear equations or Bresen-ham’s algorithm.Furthermore,the skew operations dominate this approach to morphological operations with rotated lines.

Fortunately,there is a simpler,pixel accurate solution:we apply only a single skew operation and correct for the change in length.With this,line erosions

at arbitrary angles between[?π

4,π

4

]become(angles outside this range can be

handled by?ips and trasposes):

bits_erode_line(image,r,angle){

skew=tan(angle);

corrected=r*cos(angle);

bits_skew(image,skew);

erode_line_horizontal(image,2*corrected);

bits_skew(image,-skew);

}

Here,the function bits_skew moves each pixel at(x,y)to(x,y+skew·x). Note that the skew operation is perpendicular to the erosion.It is likely faster to skew along each line(via bit shifting the line)and then perform the erosion perpendicular to that than the other way around.

12

12Conversion Between Image Formats

Conversion to/from run-length encoded representation to either unpacked or packed bit-images is straight-forward.We note that input/output can be im-plemented particularly e?ciently in terms of run-length image representations, since many binary image formats internally already perform some form of run-length compression,and their runs can be directly translated in runs in the in-memory representation.Even for?le formats that do not use runs,input/output can be implemented by compressing and decompressing the image one line at a time;that is,we read a line by calling the image decompression library,decode the line in an unpacked format into a1D array,and then compute the run-length encoding of that array.

13Connected Component Extraction and Statis-tics

Connected components,and statistics over them,can also be computed quickly:?We associate a label value label[i][j]with each run lines[i][j].

?For each run in the entire image,we create a set in a union-?nd data structure.

?We then iterate through all the lines in the image and,for each run in the current line merge its label with the labels of any runs in the line above.

This can be done in linear time in the number of runs in each line.

?Finally,we renumber the entries in label[i][j]according to the canon-ical set representative from the union-?nd data structure.

This is similar to a connected component algorithm on the line ajacency graph (but the order in which nodes are explored can be di?erent).It is also similar to e?cient connected component algorithms operating on bitmap images,but runs are used instead of iterating over the pixels or words.

The output of this process is a set of runs lines[i][j]and correspond-ing labels label[i][j].We can also think of these structures together as a run-length compressed image with pixel values stored in the label array.For computing bounding boxes,centroids,moments,boundaries,boundary proper-ties,or other spatial statistics over these regions,we can iterate through the runs and accumulate the corresponding information in accumulator arrays indexed by the labels stored in the label array.

14Other Operations

There are a number of other operations that can be carried out quickly on run-length representations:

13

?Run-length statistics are frequently used in document analysis to estimate character stroke widths,word spacings,and line spacings;they can be computed in linear time for both black and white runs by iterating through the runs of an image.In the vertical direction,they can be computed by ?rst transposing the image.

?The line adjacency graph can be computed by treating the runs as nodes in the graph and creating edges between any runs in adjacent lines if the intervals represented by the runs overlap.

?Standard skeletonization methods for the line adjaceny graph can be ap-plied after computation of the LAG as described above.(See also[16].)?Run-length based extraction of lines and circles using the RAST algorithm

[12]can be applied directly.

15Experiments

We have implemented,among others,conversions between run-length,packed bit,and unpacked bit representations of binary images,transposition,all the morphological operations with rectangular structuring elements described above, bitmap rotation by arbitrary angles,computation of run-length statistics,con-nected component labeling,and bounding box extraction.For evaluating the general behavior of these algorithms and determining whether they are fea-sible in practice,we are comparing the performance of the run-length based algorithms with a companion binary bit blit based morphology package,as well as the bitmap-based binary morphology implementation in Leptonica1.48 (8/30/07),an open source morphological image processing library in use in pro-duction code and containing well-documented algorithms and implementations [4,5].

Leptonica contains multiple implementations of binary morphology;the fastest general-purpose implementation is pixErodeCompBrick(and analogous names for other operations),a method that uses separability and binary decomposition; it was used unless otherwise stated.Leptonica also contains partially evaluated morphology operators for a number of speci?c small mask sizes available under the names like pixErodeBrickDwa.These were used when applicable.Both libraries were compiled with their default(optimized)settings.

In the experiments,we want to address several questions:

?What is the scaling behavior of the run length methods?

?Which of the possible di?erent run length implementations is better?

?Is any one method uniformly better than the others,or do we need to perform algorithm selection?

?How do these algorithms perform for the types of mask sizes and images found in typical document analysis tasks?

14

Figure 2:Average running times (vertical axis)for opening (left)and closing (right)with square masks of di?erent size (horizontal axis)of the 1600document image pages from the UW3document image database;the database consists of journal article pages scanned at 300dpi and binarized.lept =Leptonica bit blit based implementation (using pixErodeBrickDwa for sizes <52),bits =compan-ion bit blit library to the run length library,rle =run length-based morphology using ?rst within-line then between-line operations,rlet =run length based morphology using within line operations only and transpose.

15.12D Rectangular Masks

To gain some general insights into the behavior of the run length methods for real-world document images,the running times of morphological operations on the 1600images of the UW3[11]database,300dpi binary images of scans of degraded journal publication pages,were measured.The results are shown in Figure 2.We see that,except for masks of size ?ve or below,the run length implementation outperforms the bit blit implementation.

By choosing at runtime between the bit blit implementation and the run length implementation,we can obtain a method that shares the characteris-tics of both kinds of images.As already noted above,the cross-over point can be determined automatically either based on mask size and dpi,or based on output complexity.This is shown as the bold curve in the ?gures;the curve does not coincide the bit blit based running times because the run length ?g-ures include the conversion times from run length representations to packed bit representations and back to run length representations;in many applications,these conversion costs can be eliminated.By switching back to bit blit-based

15

Figure3:A7000×7000image of a cadastral map used for performance mea-surements.

implementations for small mask sizes,we can combine the two methods into a method that gives performance closer to bit blit implementations at small sizes while still retaining the advantages of run length methods at large sizes.

In a second experiment,we compared performance of the run length method to Leptonica’s bit-blit based morphology on a di?erent document type with a binarized7000×7000pixel cadastral map(Figure4).

15.2Circular Masks

As an illustration of the kind of performance achievable using the run length methods for general purpose structuring elements,Figure5shows the perfor-mance on circular and rectangular structuring elements using run-length and brute force bit blit morphology.

As expected,the time for the brute force bit blit morphology grows quadrat-ically in the size of the structuring element.Run length morphology grows lin-early up to a point where the output complexity(the number of runs in the output image)starts decreasing and dominates the running time.

15.3Document Analysis Performance

In the third experiment,we want to illustrate overall performance of run length morphology methods as part of a simple morphological layout analysis system. The method estimates the inter-word and inter-line spacing of document images based on black and white run lengths,then performs erosion operations to smear together connected components that are likely to be part of the same blocks based on those estimates,and?nally computes the bounding boxes of

16

Figure 4:Times for opening (left)and closing (right)the 7000×7000image of a cadastral map in Figure 3with the di?erent sized square masked.lept =Leptonica bit blit based implementation (using pixErodeBrickDwa for sizes <

52),bits =companion bit blit library to the run length library,rle =run length-based morphology using ?rst within-line then between-line operations,rlet =run length based morphology using within line operations only and transpose.

the resulting large connected components;this approach is similar to the one in [23]As the input,the 1600pages from the UW3database were used.These are 300dpi letter sized page images scanned from published journals.Relative performance of the run-length based method and Leptonica’s bit blit based method,including bounding box extraction,are shown in Figure 6.The results show that run length morphological algorithms perform about twice as fast at 300dpi than the bit blit based algorithms in Leptonica (at 600dpi or 1200dpi,the advantage of run length methods would be greater still).

16Discussion

The paper describes a number of methods used in our open source binary mor-phology library for performing morphological and related operations on run length representations.Although there is considerable overlap with previously published results,some algorithmic details appear to be not well known,like the use of skew operations for linear structuring elements,and the application of run-length like decompositions and doubling for bit blit based morphology with arbitrary structuring elements.We hope that these methods and implementa-

17

Figure5:Times for morphological closing of a binary image of a two column text page at600dpi using structuring elements of di?erent size.Both circular structuring elements and square structuring elements are shown.

tions will become a useful reference implementation for other work,as well as a practical library for performing binary morphology on document images.

The performance measurements on real-world document images over a wide range of mask sizes,as well as the performance evaluation in the context of a complete layout analysis system demonstrate clearly that the run length mor-phology is an e?cient alternative to bit blit based morphology for realistic doc-ument images.Furthermore,comparing300dpi page images and performance on larger cadastral maps,as well as theoretical considerations,suggest that the advantage of run length methods increases as the size and resolution of images increases.

The algorithms described in this paper were developed originally for docu-ment image applications and have proven useful in a variety of practical applica-tions in the years since.Although it is di?cult to establish formally,generally, run length based algorithms seem to be somewhat easier to implement e?ciently than bit blits,since the boundary conditions and special cases seem to be sim-pler and fewer.Furthermore,run length morphology has no machine word size dependencies.

It will remain for future work to see how the algorithms presented in this paper relate to methods recently proposed in the literature.Van Droogenbroeck [7],for example,also describes two algorithms using list or rectangular structures to aid in the computation of fast binary morphology.It appears that his methods are considerably more complex to implement.Benchmarking and comparison of these new methods(including the ones presented in this paper)will have

18

Figure 6:The left panel shows boxplots of the running times of the morphological layout analysis system using either the run length method (mixed within/between methods)or Leptonica’s bit blit methods (using pixErodeBrickDwa where possible).The right panel shows a smoothed 2D histogram of the same data.The system estimates character and line spacing from run lengths and then performs a rectangular dilation that merges lines and characters into blocks.Finally,it computes bounding boxes of connected components.Performance is shown over the 1600IMGLINES images from the UW3database.

to take into account both space and running times,since both are crucial in practical applications.Unlike high performance bit blit methods,these new methods are also sensitive to the complexity of both the input and output.Van Droogenbroeck also raises the issue of implementation complexity;while this is hard to quantify,it appears that the run length methods described in this paper are easier to implement.All these approaches are a trend to taking advantage of coherence in images,similar to the way compression algorithms do.

There are a number of obvious directions for extensions.Operations on arbitrary morphological masks can be represented as run length images as well,and morphology over them can be carried out using similar approaches to those described here.All the accesses within the inner loops of these algorithms are sequential;this presents opportunities for more compact representations,such as variable length multi-byte encodings of run lengths (since shorter run lengths tend to be more frequent than longer run lengths).In fact,even Hu?man coding or in-memory zlib compression for each run are possible.

Let us conclude by examining how these results can be used in practice.

19

Run length morphological operations can be incorporated into systems in var-ious ways:(1)a system can use RLE representations and temporarily convert to bitmaps when there is a performance advantage(taking into account the conversion costs),(2)a system can use bitmaps as its primary representation and temporarily switch to RLE when it speeds things up,(3)a system can keep everything in RLE format,or(4)a system can continue to keep everything in bitmap format.It’s clear that,provided the system selects the correct algorithm automatically,(2)is no worse than(4)and that(1)no worse than(3)in terms of performance,and the paper has,in fact,given examples of speedups using such mixed approaches.The experiments presented above on a simple layout analysis system also suggest(but don’t conclusively prove)that(3)may be faster than (4)on average in real-world applications.The question of whether(1)or(2) is faster for real-world applications remains to be determined.Many real-world imaging applications,such as printing engines,already use run length represen-tations internally,and the methods presented in this paper give them the ability to integrate and perform morphological operations directly and e?ciently.Ex-isting bitmap-based libraries like Leptonica may want to choose approach(2) to improve performance on large masks without a?ecting software using the library.Furthermore,the run length conversion and operations can be incor-porated directly into a blit-like operation,resulting in a hybrid approach;this will be explored elsewhere.Overall,run length approaches to binary morphol-ogy give us another useful option for implementing morphological operations e?ciently,in particular in document imaging applications. Acknowledgements

The author would like Dan Bloomberg,Laurant Najman,Daniel Keysers,and Christian Ko?er for valuable suggestions and discussions.

References

[1]Karen L.Anderson and Joan L.Michell.System for creating transposed image

data from a run end or run length encoded image.U.S.Patent#4783834,1988.

[2]Ka Man Au and Zaioxun Zhu.Skew processing of raster scan images.U.S.Patent

#6490376,2002.

[3]H.S.Baird,S.E.Jones,and S.J.Fortune.Image segmentation by shape-

directed covers.In Proceedings of the Tenth International Conference on Pattern Recognition,Atlantic City,New Jersey,pages820–825,1990.

[4] D.S.Bloomberg.Implementation e?ciency of binary morphology.In Interna-

tional Symposium on Mathematical Morphology VI,2002.

[5] D.S.Bloomberg.The Leptonica library.https://www.wendangku.net/doc/567917063.html,/,2007.

[6] A.K.Das and B.Chanda.A fast algorithm for skew detection of document images

using morphology.International Journal on Document Analysis and Recognition, pages109–114,2001.

20

系动词run的用法

系动词run的用法 run用作连系动词只限于和少数形容词搭配。 run cold My blood ran cold.我的血都凉了。 The sight of the dead body made his blood run cold.他看见尸体不禁毛骨悚然。The water ran cold when I turned the tap on.我把水龙头打开,水就凉了。 Run dry The well ran dry.这口井干枯了。 The little pond ran dry.那座小池塘干涸了。 The River Wey ran dry during the recent drought近来天气千旱,韦河干涸了。 run high Feelings against him ran high.反对他的情绪高涨。 Feeling over the dismissal ran high.对解雇事件群情鼎沸。 Passions ran high as the election approached.选举日期临近,人们情绪很高涨。 run loose The lion has run loose.狮子从笼子里跑出来了。 run low The petrol's running low.汽油快用完了。 We’re running low on petrol.我们的汽油不多了。 our supplies are running low我们的供应品不多了。 run riot

The crowd ran riot in the streets.群众在街上乱跑。 Football hooligans ran riot through the town.闹事的足球迷在城里胡作非为。Inflation is running riot and prices are out of control.通货极度膨胀,物价失去控制。 run short I have run short of money.我缺钱。 Go and get some more oil so we don't run short.去多弄些油来以免到时候用光了 I'm late for work every day and I'm running short of excuses.我每天迟到,现在找不到什么借口了。 run small These shirts run small这些衬衫小了。 run strong The tide was running strong潮水上涨了。 run wild The violets are running wild in the flower bed.紫罗兰在花圃里疯长。 Those boys have been allowed to run wild.那些男孩子无人管教肆无忌惮。

肚皮舞基础教程

肚皮舞基础教程 肚皮舞基础教程 第一步:乐动心随,自娱得乐 爱上肚皮舞的理由,是因为从中获得了快乐,这种快乐来自于你的内心和身体,当身体动作轻重与鼓点的顿挫吻合一致,当内心的 韵律起伏与婉曲优美的旋律相互契合,你会感到一种由内而外涌出 的喜悦,如果你感受到了,那么不要压抑,让这种喜悦表现在脸上,让笑容尽情绽放,让快乐递增! 肚皮舞初学者,不必在乎自己有无舞蹈基础,更不必疑惑自己能否学好,只要你喜欢,能够从跳舞中感受到愉悦,就是最大的成功!这就是舞蹈中常说的自娱感,而好听的肚皮舞音乐是最好的启蒙老师。 第二步:掌握方法,坚持练习 兴趣固然是最好的老师,但要跳好肚皮舞还得要靠自己切切实实的研习。首先要掌握正确的练习方法,既然是舞蹈,那么每一个动 作就会有它所须遵循的规格和所须注意的要领,如果没有正确的方 法指引,那么动作质量和练习的效果自然会大打折扣。 再者,练习的步骤也应该由浅入深、由易入难,肚皮舞所需要的身体的柔韧、力量、灵活、协调等等也需要长时间的练习,不可能 一口吃成个大胖子,学习舞蹈不可急于求成,这就需要我们坚持练习,把肚皮舞当成自己健康生活的.一部分,列到自己长期的健身计 划中去。 第三步:用心感受,手舞足蹈

这是更高一层的要求,如果你已经掌握了肚皮舞的基本动作,那么就要向更高的目标跃进--学会用这些舞蹈的基本语汇表现音乐、表现内心的情感。我们需要明白,舞蹈不是为动作而动作,动作本身就是一种语言,没有感情浸润的语言文字是苍白的,没有感情浸润的动作更是干瘪的。古人说“情动于中而形于言,言之不足故嗟叹之,嗟叹之不足故咏歌之,咏歌之不足,不知手之舞之,足之蹈之”,舞蹈本来就表现情感最直接、最生动的方式,舞蹈的一大本质就在于表意表情,所以,用心去感受音乐吧,让我们的动作有温度、有灵魂! 肚皮舞教程,相信通过上面的介绍之后,大家都已经知道怎么样才能学好肚皮舞,那么对于初学者而言,做到上面的这些要求,相信你很快就能够学会跳肚皮舞。

(完整版)主谓一致用法总结

主谓一致用法总结 I.主谓一致定义 II.谓语受主语支配,和主语在人称和数上保持一致,这叫做主谓一致。 III.例: My favorite food is noodles. II. 主谓一致的重要原则 ?语法原则 ?意义原则 ?就近一致 (一)语法一致 IV.顾名思义,即谓语在语法角度上与主语保持一致,不考虑主语的意义。 V.以单数名词或代词,动词不定式短语作主语时,谓语动词要用单数;主语为复数时,谓语用复数。例如: 注意:不定式及动名词作主语时,谓语 动词单数。E.g. 2) 由and或both……and连接的并列成分作主语时,谓语动词用复数。例如: Both you and he are right. Mr. and Mrs. Brown have a son called Tom. 但并列主语如果指的是同一人,同一事物或同一概念,谓语动词用单数。例如:The poet and writer has written lots of books. The poet and the writer have come. 可通过名词前定冠词来判断。 3) 由and连接的并列单数主语之前如果分别由each, every修饰时,其谓语动词要用单数形式。例如: Now every man and every woman has the right to receive education. 4) 主语后面跟有 but ,except, besides, with ,together with 等介词短语时,谓语动词仍用与主语(即前面的词语)保持一致。例如: The teacher with his students is going to have a picnic in the park. The students with the teacher are going to have a picnic in the park. Nobody but two boys was late for class. 5) 集合名词作主语谓语动词要用复数。 如people, police, cattle, clothes等。 集合名词指可用来指称一群对象的词语,这些对象可以是人、动物、或是一群概念等事物。 常见集合名词:people, police, cattle, goods, clothes等。 e.g. The police are looking for him. ?有些集合名词如class, team, group, family 根据其表达意义不同,单复数用法也不同。

现在完成时的用法讲解1

现在完成时的讲解 对所学时态的回顾,引入现在完成时 通过数轴来概括讲解所学的四个时态:一般现在时、现在进行时、一般过去时、一般将来时。 (导入)有时候,这4种时态还不能满足我们表达的需要。比如:表示“某人过去曾经做过某事”或者“某人做某事多久”,以上五种时态就派不上用场了。这时,我们可以用一种新的时态——现在完成时表示。同样也用数轴来表示一下。 taught will teech -------- ---------- -------- --------- ---------- ? —过去时now 垠时 is teaching fit在发生) -------- ---------- -------- --------- ---------- ? DOW 枉进行时 past two years (has taught) ------ --------------------------------------------- Two years ago 现在完成时now 一现在完成时的构成:主语+ have/has +过去分词 (过去分词:规则动词的过去分词构成与动词过去式相同;不规则动词需要特殊记忆。 eg」_ have taught English in this school since 1999. 二、否定式:主语+ haven' t/hasn' t +过去分词。 疑问式:Have /Has +主语+过去分词? 简略答语:Yes,主语+ have/has.肯定) No,主语+ haven' t/hasn' t.(否定) —Have you finished your work? —Yes,l have. 三现在完成时的含义之一表示过去发生或已经完成的动作对现在造成的影响或结果, 常与already/yet,just,never/ever, before, so far等连用。这些标志词可以表达这种含义 1.already意为“已经”,通常用于肯定句中,可放在助动词之后,过去分词之前,也可以放在句末。实例: 1)rve already read this book.我已经读过这本书了。 (“读”这一动作发生在过去,对现在造成的影响是“知道书中的内容”。) 2)rve washed my clothes already 我已经洗了衣服。 (洗衣服的动作已完成,其结果是“衣服冼干净了”。)

男生现代舞蹈基础教学视频

男生现代舞蹈基础教学视频 篇一:舞蹈基础入门学习 贵阳幼儿师范高等专科学校教案 系(部)艺术系教研室舞蹈组课程名称舞蹈 任教专业年级、班级2013级A06--09 班任课教师李倩 1 2 3 4 篇二:学习跳舞视频教程大全 学习跳舞视频教程大全2013-4-14 08:07 一、规范交谊舞系列 1、规范交谊舞_华尔兹(全集12个视频) 2、规范交谊舞_探戈(全集12个视频) 3、规范交谊舞_伦巴(全集12个视频) 4、规范交际舞_北京平四(上集11个视频)规范交际舞_北京平四(下集11个视频) 5、规范交谊舞_吉特巴(全集12个视频) 6、规范交谊舞_蝴蝶布鲁斯(全集12个视频) 7、规范交谊舞_北京恰恰恰(全集12个视频) 8、规范交际舞_快三(全集6个视频)9、规范交际舞_快四(全集12个视频) 二、杨艺交谊舞新花样系列 1、华尔兹(杨艺、闫冬梅)24 2、吉特帕(杨艺、许玮娜)25 3、伦巴(杨艺.阎冬梅)24 4、北京平四(杨艺、许玮娜)25 5、探戈(杨艺、石琳)19 6、蝴蝶布鲁斯(杨艺.石琳) 25 三、中老年学跳交谊舞系列 1、中老年学跳交谊舞_北京平四(杨艺、许玮娜)83 2、中老年学跳交谊舞_随心吉特帕(杨艺、许玮娜)9 四、花样精选系列 1、华尔兹精选.初级(杨艺、孙文虹)22 2、北京平四精选.初级(杨艺、孙文虹)78 3、探戈花样精选.初级(杨艺、孙文虹)21 4、蝴蝶布鲁斯精选.初级(杨艺、孙文虹)13 5、伦巴花样精选.初级(杨艺、孙文虹)24 6、随心吉特帕精选.初级(杨艺、孙文虹) 14 五、其它交谊舞系列 1、杨艺教你跳华尔兹(杨艺、许玮娜)18 2、杨艺教你跳_北京恰恰恰(杨艺、周姝清)27 3、北京华尔兹花样精选(杨艺、徐丽娜6碟装)55 4、迷人的快四(杨艺、许玮娜)25 5、杨艺.许玮娜交谊舞伦巴18 6、吉特帕基本步与韵律8 7、梁思源张卓妮桑巴舞教学

主谓一致的用法讲解

主谓一致的用法讲解 一、概述 句子的主语有单复数及人称的变化,其谓语动词需要根据主语的人称和数的不同而有所变化。即:谓语动词与其主语在人称和数上必须保持一致。 Her dreams have come true. 她的梦想实现了。 Her dream has come true. 她的(一个)梦想实现了。 从以上两个例句可以看出谓语动词随主语的数而变化。 She/He often arrives school late. 她(他)常常上学迟到。 They often arrive school late. 他们常常上学迟到。 You often arrive school late. 你常常上学迟到。 从以上三个例句可以看出谓语动词随主语的人称变化而变化。 I am a teacher. 我是老师。 He/She is a teacher.他(她)是老师。 They are teachers.他们是老师。 从以上三个例句可以看出谓语动词be随主语的人称变化而变化。 二、主语与谓语一致所遵循的三个原则 主语的人称,特别是主语的数是决定谓语形式的关键。除第一人称I和第二人称you之外,单数主语之后的谓语动词用单数形式;复数主语之后的谓语动词用复数形式。主语和谓语动词的一致要遵循下面三个原则: 1、语法上的一致 所谓语法一致原则,即主语和谓语的语法形式在人称和数上取得一致。谓语的单、复数形式依据主语的单、复数形式而定:主语为复数,谓语动词用复数;主语为单数或者是不可数名词,谓语动词用单数。 China belongs to the Third World. 中国属于第三世界。 We are sure he will come. 我们肯定他会来。 使用语法一致的情况 (1)当主语是and,both…and连接的并列结构 如果主语指的是两个或两个以上的人或物,则谓语动词用复数。 My mother and I have seen the film. 我妈妈和我已看过这部电影。 Both rice and wheat are grown in this part of China. 在中国的这个地方既种稻子又种小麦。 注意:由and连接的并列主语前面分别有each,every,no修饰时,其谓语动词用单数形式。Every boy and every girl has to receive education in our country. 在我国每一个男女孩子都得受教育。 No student and no teacher was invited to the party. 师生没有被邀请参加晚会。 (2)主语后面接说明主语的修饰语 主语后面接说明主语的修饰语如with,along with,together with,as well as,like,rather than,but,except,besides,including,in addition to,谓语动词不受修饰成分的影响,仍保持同主语一致的关系。 The teacher with two students was at the meeting. 那位老师和两个学生参加了会议。 The girl as well as the boys has learned to drive a car. 这个姑娘和男孩子一道,也学会了开汽车。 A library with five thousand books is offered to the nation as a gift.一个有5000册书的图书馆作为礼物赠送给了国家。

现在完成时的用法解析

Lead in 一般过去时导入:一般过去时的概念 一般过去时表示过去某个时间发生的动作或存在的状态。 I lost my pen.(过去时) I have lost my pen.(现在完成时) 过去时一般表示过去所发生的动作或存在的状态。“我把笔丢了”,说话人只是想告诉对方在过去的某一个时间里他的笔丢了,仅此而已。(仅仅是在陈诉过去的一个事实,与现在没有关系) New lesson 一.现在完成时的构成: 助动词have/has(not) +动词过去分词 She has turned on the lights. 肯定式:have/ has+过去分词 否定式:haven’t/hasn’t+过去分词 疑问式:把have/has 提到主语前面 肯定回答:Yes,…have/has 否定回答:No,…..haven’t/hasn’t 二.用法 1.表示过去发生的动作对现在造成的影响或结果. 例如:She has gone. 她走了. She went in the past.(She is not here

now.) I have just cleaned my hands. 我刚洗过手。(“洗手”是发生在过去的动作,对现在造成的结果是“手干净了”) I have closed the door. (The door is close now.) She has turned on the lights. (The lights are on now.) He has written his name on the blackboard. (The name is on the blackboard now.) Mother has cooked the dinner. (We can have dinner now.) You have seen the film. (You know what the film is about.) We have cleaned the classroom. (The classroom is clean now.) 2. 表示动作发生在过去,并且一直延续到现在,甚至还可能继续延续下去。这时常和since所引导的短语或从句或for引导的短语连用(for有时可以省去)。以及so far, by now, these days, in the last/past … years/days…等连用。 I have lived here for over ten years. (表示他现在还在这里居住,并且还有可能继续住下去)比较:I lived here ten years ago.(仅仅说明了他十年前在这里记住过的事实,不代表现在他还住在这里) He has studied here since 2006. 都用How long 提问,例: We have learned English for three years. We have learned English since three years ago.

run-短语集锦知识讲解

精品文档 run 短语集锦 run away (from) 走掉,跑开;逃避。如: Don’t run away. I’ve something to say to you. 别跑,我有话和你说。 You can’t keep running away from your responsibilities all the time. 你不能总是逃避你的责任。 run across无意间碰到。如: I ran across her in the public library yesterday. 我昨天在公共图书馆碰见她了。 run out 用完,耗尽;(指协议﹑文件等)失效, 过期。如: Our food is running out. Will you go to the supermarket to buy some bread?我们的食物快吃完了,你能到超市买些面包吗? My passport has run out for a month. 我的护照已经失效一个月了。 run out of 用完某物。如: The aircraft will run out of fuel in another hour. 再过一小时飞机的燃料就将用完。 run over溢出;撞倒并碾过;复习。如: The bath is running over — turn the taps off. 浴池的水溢出来了。把水龙头关上。 He ran over a rabbit as he was driving back from a meeting. 他在会后开车回来的路上撞了一只兔子。 Let’s run over our lines again before our performance on the stage. 精品文档

肚皮舞入门基础动作详解

肚皮舞瘦身攻略 如今,肚皮舞已经变成了女人们瘦身的秘密武器。 A、舞蹈要点 教练谢微指出,摆、抖、绕、顶等为肚皮舞的主体动作,主要是腰腹部的运动。在舞蹈中,上身下身要实现动静分离,即上身动则下身基本不动、下身动则上身基本不动,这样可以达到局部强化锻炼的效果。谢微同时指出,因为是没有高冲击的运动,肚皮舞的缓冲损伤可以减到很低,而且习舞者可以根据自己的状态和能力自我调节动作的频率和幅度,因此易操作而安全性高。 在一节一个小时的肚皮舞课程中,前30分钟为预热期,主要进行基础动作训练;然后是20分钟的有氧训练,这是减脂阶段;最后10分钟为放松阶段,在舒缓的音乐中进行一些放松练习。 B、瘦身效果 谢微说,肚皮舞减肥的重点部位主要是腰、臀、腿、背和臂,几乎每个扭摆动作都有瘦身作用。 肚皮舞能充分塑造腰腹部的柔韧性。肚皮舞很多动作都是胯部的提抬,以及腹部呈圆圈或者是上下的运动,经常训练能使腰部更加灵活,线条更加优美。 整个舞蹈动作都在有效地收紧全身线条,这就可以减去手臂、臀部、大腿的赘肉。 在跳肚皮舞时,舞者需要常抬起脚后跟光着双脚在缓步前行中表

演动作,这还有助于练出一双结实的小腿。 肚皮舞还是一种全身的运动,可以让你的腿部、臀部、肩膀以及颈部都得到充分的活动,从而提高身体的弹性和柔韧性。 C、经典动作详解: 第一式女神 动作要领:两上臂平举,与肩平,前臂稍高,与后臂成大于90℃的角;手掌向外翻,五指并拢,尽量压到与地面平行;两肩外展,双臂对称。 瘦身指向:肱二头肌、肱三头肌、背肌 第二式顶胯 动作要领:利用腹肌前收胯关节,腰胯两侧分别向前顶。 瘦身指向:腹肌、胯关节灵活性 第三式骆驼 动作要领:立胸并向前顶,移到最大幅度时收腹,向下压下腹肌,依次循环。 瘦身指向:背肌、小腹 第四式八字绕环 动作要领:一个胯关节向前移动,划个弧行后向后,另外一个胯关节朝前,依次上下蠕动。 瘦身指向:臀部、侧肌

l主谓一致讲解最全面主谓一致讲解

主谓一致的讲解 主谓一致是指: 1)语法形式上要一致,即名词单复数形式与谓语要一致。 2)意义上要一致,即主语意义上的单复数要与谓语的单复数形式一致。 一、并列结构作主语时的主谓一致 1.由and 连接主语时 And 连接的两个或多个单数可数名词、不可数名词或代词作主语时根据意义或概念确定谓语用单数或复数 1)并列主语表示不同的人、物或概念时谓语动词用复数 Li Ming and Zhang Hua are good students. Like many others, the little tramp and the naughty boy have rushed there in search of gold. 小流浪汉和调皮的小男孩也赶到那里寻找金子 Both rice and wheat are grown in this area. 2)并列主语表示同一个人、物或概念时,谓语动词用单数形式。 The professor and writer is speaking at the meeting. 那位教授兼作家正在会上发言 A journalist and authour lives on the sixth floor. 一位新闻记者兼作家 His lawyer and former college friend was with him on his trip to Europe. 他的律师兼大学时代的朋友陪他去欧洲旅行 The Premier and Foreign Minister was present at the state banquet. 总理兼外长 比较:the writer and the educator have visited our school. the writer and educator has visited our school. His lawyer and his former college friend were with him on his trip to Europe. 注意:指同一个人或物时,并列主语前只用一个冠词,指不同的需要分别加冠词,但两个名词具有分别的对立的意思时只需要一个冠词即可 A boy and girl are playing tennis. 3)并列主语前有each, every, many a , no 等修饰时谓语动词用单数 Each doctor and (each) nurse working in the hospital was asked to help patients. Every man, woman and child is entitled to take part in the activity. 有权参加 Every boy and (every) girl admires him for his fine sense of humour. Many a boy and (many a ) girl has made the same mistake No boy and no girl is there now.没有任何男孩和女孩在那里 注意:many a 跟单数可数名词但是表示复数意义翻译为很多 Many a student was disappointed after seeing the movie. 4)并列主语为不可分的整体时,谓语动词用单数 A law and rule about protecting environment has been drawn up. 关于保护环境的法律法规已经起草完成。 The knife and fork has been washed 刀叉已经被洗好 War and peace is a constant theme in history 战争与和平是历史永恒的主题 注意;常被视为主体的结构 A cup and saucer 一副杯碟 A horse and cart 马车 A knife and fork 一副刀叉

英语中现在完成时的基本用法讲解

英语中现在完成时的基本用法讲解 (含义:我对他有所了解了,现在能够谈谈他的情况了。 )Have you been to Paris?你去过巴黎吗?(含义:如果你去过,你可以谈谈巴黎的情况。 如果你没有去过,我建议你去看看,或者我现在给你介绍一下巴黎的情况。 )We have never heard of such a man.我们从来没有听说过这样的人。 (含义:因此我们对“他一无所知,你问我们也是白问。 )模仿造句:1.因此,我们以前参观莫斯科(Moscow)。 2.你弟弟去去印度(India)吗? 3.这些孩子从未用过电脑。 2.现在完成时,表示过去某种行为的结果对现在有直接的影响Tom has lost his pen.汤姆的钢笔已经丢了。 (含义:结果是现在没笔用,必须借一支笔,或者买一支笔。 )Dad, I have finished my homework.爸爸,我已经做完家庭作业了。 (含义:现在应该可以让我出去玩会或者看下电视了。 )He has gone to Hong Kong.他已经去香港了。 (含义:结果是他不在这里,你在这儿见不到他了。 )模仿造句:1.杰克已把铅笔弄断了。 2.妈,我已经吃过中饭了。 3.玛丽已经去广州了。 3.现在完成时,表示某经历的时间长度(一般用for引导的时间状

语)Mr. Smith has been in China for 10 years.史密斯先生在中国待过10年了。 (含义:他待的时间够长的了,他对中国的情况很熟了,或者他的中文自然讲得很棒了。 )Jane has stayed in Shanghai for 3 days.珍妮在上海待了两天。 (含义:珍妮待在上海的时间短,对这里的情况还很不熟悉,或者她不应该马上离开,应该多玩几天。 )I have taught English for 10 years.我已经教英语10年了。 (含义:我教英语的时间已经非常长了,有丰富的教学经验了。 )模仿造句:1.简(Jane)已经在杭州住了8年了。 2.我妈已经在这家公司工作20年了。 3.今天我已经练英语口语2个小时了。 本文作者:丹丹英语(公众号:英语语法学习)本文已获转载授权,版权归作者所有,如需转载,请联系原微信公众号“英语语法学习。

主谓一致用法详细讲解40例

主谓一致详细讲解 1.由and所连接的两个名词指同一人物、同一事物、同一概念时,谓语动词要用单数形式。 例如: Both bread and butter were sold out in that grocery. Zhang Hua and Li Ming are good students. 注意:当两个主语为不可分的东西时,谓语动词用单数形式。例如: A watch and chain was found on the desk. Bread and butter is nutritious. When and where this took place is still unknown. 注意:一身兼二职的情况:The writer and runner is attending the conference. 2. 由every…and every…, each…and each…, many a…and many a …, no ...and no…等构 成复合主语时,谓语动词用单数形式。例如: Each man and each woman is invited.每个男人和女人都邀请了。 No boy and no girl is there now. 现在那里没有一个男孩和女孩。 Many a boy and many a girl has been invited.很多男孩和女孩都被邀请了。 In China every boy and every girl has the right to receive education. 在中国每个男孩和女孩都有接受教育的权利。 3. 由or, not only... but also..., not…but…, either...or, neither...nor,whether……or……连接 主语时,谓语与靠近的主语一致,即就近一致的原则。例如: He or his brothers were to blame .Either you or I am mad. Are either you or I mad? Neither you nor he is right. Not only the teacher but also his family were friendly to me. 4. 当主语后跟有with, along with, together with, besides, except, like, including, in addition to, as well as, rather than等词时,谓语动词根据前面的主语变化。例如: All but one were here just now. A library with five thousand books is offered to the nation. She as well as the other teachers is going t o Nanjing. 5. 某些词结尾字母为s, 但并不是复数形式,如: physics, maths , economics (经济学), politics, news…作主语时用单数形式。means, works(著作)单复同形。例如: Physics is very important. Every means has been tried. Every possible means has been used to prevent air pollution, but the sky is still not clear . 6. 当一些由两部分构成的表示衣物或工具的名称作主语时, 谓语用复数形式, 如: trousers , shorts, shoes, glasses, goods, clothes, chopsticks, scissors. 如果这些词由a pair, piece, kind , type ,box + of 修饰,则用单数形式.例如: My trousers are white and his clothes are black. A pair of shoes is lying here. These kinds of glasses are popular. 7.单复数同形的名词,如sheep, deer 等做主语时,应根据主语的单复数意义确定谓语动词 的形式。例如: A deer is over there. Some deer are over there . 8.population做主语时,通常看作单数,若population前有分数、百分数修饰时,则句子谓 语通常用复数。例如: The population in China is very large and 80% of the population live in rural areas . 9. 复数名词, 如: people, police, public ,crew ,cattle作主语时, 谓语动词用复数形式。例如:The police like to help people. People are talking abou t the news .. The cattle are grazing in the fields . 10. 集体名词, 如: family ,crowd ,class ,team ,audience ,committee ,club, group ,enemy ,

现在完成时的用法讲解修订版

现在完成时的用法讲解集团标准化小组:[VVOPPT-JOPP28-JPPTL98-LOPPNN]

现在完成时的讲解 对所学时态的回顾,引入现在完成时 通过数轴来概括讲解所学的四个时态:一般现在时、现在进行时、一般过去时、一般将来时。 (导入)有时候,这4种时态还不能满足我们表达的需要。比如:表示“某人过去曾经做过某事”或者“某人做某事多久”,以上五种时态就派不上用场了。这时,我们可以用一种新的时态——现在完成时表示。同样也用数轴来表示一下。 一现在完成时的构成:主语 + have/has + 过去分词 (过去分词:规则动词的过去分词构成与动词过去式相同;不规则动词需要特殊记忆。 eg .I have taught English in this school since 1999. 二、否定式:主语 + haven’t/hasn’t + 过去分词。 疑问式: Have /Has + 主语 + 过去分词 简略答语: Yes, 主语 + have/has.(肯定) No, 主语 + haven’t/hasn’t.(否定) —Have you finished your work — Yes,I have. 三现在完成时的含义之一表示过去发生或已经完成的动作对现在造成的影响或结果, 常与already/yet,just,never/ever,before, so far等连用。这些标志词可以表达这种含义. 1.already意为“已经”,通常用于肯定句中,可放在助动词之后,过去分词之前,也可以放在句末。实例: 1)I've already read this book. 我已经读过这本书了。 (“读”这一动作发生在过去,对现在造成的影响是“知道书中的内容”。) 2)I've washed my clothes already.我已经洗了衣服。 (洗衣服的动作已完成,其结果是“衣服冼干净了”。) 注意:在表示吃惊或明知故问等感情色彩时,already也可用于(口语)疑问句中。实例:3)Have you met him already 你(真的)已经见过他了 2.yet用在疑问句中意为“已经”,用在否定句中意为“还”,常放在句末。实例:1)—Has he found his watch yet 他已经找到他的手表了吗 —No,not yet.不,还没有。

run的搭配用法总结

▲run about Put your coat on, or you'll catch cold running about.快把外套穿上,不然你到处乱跑会感冒的。run across1(v.+adv.) 〈主英〉开车送give a ride to sb ▲run sb?acrossDon't wait for the bus in this cold weather; I'll get the car and run you across to your mother's.这么冷的天气别等公共汽车了,我开车送你到你母亲那里去。 run across2(v.+prep.) 1.不期而遇; 偶然发现find or meet by chance 〔说明〕run across作此解时通常不用于进行体。 ▲run across sb/sth I ran across her in the public library yesterday.我昨天在公共图书馆碰巧遇见了她。 I ran across my old friend Jail in Paris last week.上星期,我在巴黎遇见老友杰尔。 I ran across a beautiful poem in this book.我在此书中偶然发现了一首好诗。 2.非法地运送… bring or take sth into a country illegally and secretly; smuggle ▲run sth across sth He used to run guns across the border.他过去经常偷运枪支出境。 run after(v.+prep.) ▲run after sb/sth1.追赶try to catch The policemen are running after a prisoner who escaped last night.警察在追捕一名昨夜逃跑的犯人。 The dog was running after a rabbit.那条狗正追逐一只兔子。 Don't bother running after the bus, you'll never catch it.别费劲去追赶那辆公共汽车了,你怎么也赶不上的。 2.追求try to gain the attention and company of Instead of devoting himself to his studies, he wastes his time running after girls.他没致力于学习,而是浪费时间追求女孩子。 If you didn't run after her so much, she might be more interested in you.如果你不是拼命追求她的话,她也许会对你更有兴趣的。 3.伺候perform the duties of a servant for Don't expect me to run after you all your life.别指望我伺候你一辈子。 run against(v.+prep.) 1.碰及,碰撞come into collision with ▲run against sb/sthHe ran against a wall in the darkness.黑暗中他撞在一堵墙上。 While walking on the pavement, he ran against a lamppost.他正在便道上走着,一不注意撞到电灯杆上了。 2.同…竞选compete with sb for an elected office ▲run against sbHe is running against many competitors in the 100 metres.在100米赛跑中,他得对付许多竞赛者。 Roosevelt ran against Hoover in 1932.1932年罗斯福与胡佛竞选总统。 Mr. Price risked defeat in running against Mr. Johnson in the last election.在上次大选中,普赖斯先生冒着失败的风险与约翰逊竞选总统。 3.偶然遇到meet sb by chance ▲run against sbI ran against an acquaintance in the street yesterday.我昨天在街上偶遇一位熟人。

初级肚皮舞基本动作

第一课 基本动作 1.跨的直线提沉(西米):西米英文原名Shimmy中文译为摆动,在肚皮舞显意为快速摆动。发力点:跨。运动轨迹:跨的上下直线提沉。动作要领:双腿微弯保持膝盖弹性,用意识指挥跨上提,下沉,要求上身保持直立,慢动作幅度较大,动作加快幅度缩小,最后加快变为抖动,形成跨的西米。 2.翻臀顶跨:发力点:跨和臀。运动轨迹:虚步站位,身体微微后倾,动力腿的跨和臀呈弧圆线向上翻和顶,要求上身保持正常体态,不能随上身和下身同时摆动,挤扭到内脏导致岔气,使内脏疼痛。 换腿:到数第二拍顶跨后小踢腿收脚换腿顶跨。名词解释:主力腿是支撑力的腿;动力腿是用于运动的腿。 3.胸的平移:发力点:胸。运动轨迹:胸左右直线移动和前后(上,下)直线移动。动作要领:左右平移用胸的两侧去感应侧面,前后平移用上胸和下胸部去感觉动作。要求下身定位,头定位。 第二课 基本动作 1.胸的平圆:发力点:胸。运动轨迹:胸画平行于地面的圆“○”。动作要领:下身定位,头部定位,用胸来感觉动作画出平行于地面的圆。动作重拍:侧面那一点。可用丁字位站位。2.跨的平内八字:发力点:跨。运动轨迹:跨画平行于地面的八字“∞”。动作要领:上身定位保持漂亮姿态,下身由跨带动首先向斜后方顶跨,关跨向前画出弧线,再移到反方向斜后方顶跨,关跨画弧线,尽量画出来的“∞”圆润饱满,连贯流畅。动作重拍:关跨那一拍。3.点跨:发力点:跨。运动轨迹:单跨直线下点。动作要领:上身定位,虚步,动力腿的跨微微前放,首先跨收提,再直线下点。要求动作干净利落,整个身体不能上下起伏,抖动,只有跨动。动作重伯:点的那一伯。 第三课 基本动作 1.蛇形手臂:蛇形手臂也是波浪手分为大,中,小三种。大蛇手:发力点为肘关节。中蛇手:发力点为肩关节和肘关节。小蛇手:发力点为肩关节。运动轨迹:垂直于地面的“∽∽”波浪。动作要领:两手之间是肩在连接,所以没有肩的波浪是断开的波浪,应当用肩的

相关文档