Before condeming your battery, check the size and quality of your battery cables. Any resistance in the cable will reduce the current available at the starter motor.
If you're half technical and have a digital meter its quite easy to check it out.
1) Measure the battery voltage by putting the meter probes directly onto the posts of the battery, note the voltage.Now crank it over with the kill chord out (so the engine doesn't start) and note the voltage again. It will probably start at about 12.2v and fall to around 10.5-11.0v whilst cranking. This is normal for a midlife battery.
A fully charged battery thats been standing awhile should read about 12.2v and a flat battery about 11.2v.
2)Put the meter red lead on the + lead post on the battery. Now put the black lead of your meter on the bolt of the positive terminal of your starter motor. Crank it over and note the voltage. If it is more than 1 volt you need to examine your battery cables or battery isolator if you have one.
As we draw huge currents when cranking an engine, the current flow in the battery cables causes a voltage drop accross the cable (due to ohms law). This voltage can be as high as 1.0volt and it is robbed from the 11.0 volts leaving the battery. We now only have 10.0 volts at the starter motor input. Take away another 1.0volt for the negative return, and the starter is now only getting 9.0 volts. Not really enough to make it crank quickly.
We had exactly the same problem on our Honda 50 4 stroke. It would start when warm (because the battery was upto 14 volts) But was a ba***rd from cold. Sea water had got in to the end of the cable and had leached up the inside of the rubber sheath, corroding the copper, which had turned black and was brittle. Replacing the cables from the battery to the engine cured the problem.