An improved quaternion switching filter for colour image denoising is presented. It proposes a RGB colour image as a pure quaternion form and measures differences between two colour pixels with the quaternion-based distance. Further, in noise-detection, a two-stage detection method is proposed to determine whether the current pixel is noise or not. The noisy pixels are replaced by the vector median filter (VMF) output and the noise-free ones are unchanged. Finally, we combine the advantages of quaternion-based switching filter and non-local means filter to remove mixture noise. By comparing the performance and computing time processing different images, the proposed method has superior performance which not only provides the best noise suppression results but also yields better image quality compared to other widely used filters.