How to remove the noise without destroying the main edge?
Use bilateral filter or anisotropic diffusion first.

The effect of anisotropic diffusion is as the following:

. The MATLAB code can be found here.

Here is its effect on your image:


Finally, non-local means is a also a good way to get rid of the noise. You might also want to take a look into that. I warn you though, it is slow.