A simpler way of achieving the same thing is to duplicate the layer, blur the top layer heavily, and then set it to "divide".
It is also more robust than k-means. The author's algo will only work on scanned images. Photographed pages from a book will often have a slight shadow on half the page from the curvature. Blur-divide will clean this up. K-means will think you've used a lot of gray and not figure out that there are multiple background colors.