怎么对图像进行距离变换?
1、先给出一幅图片:
i=Rasterize@
Graphics[{Green, Disk[{0, 0}, {2, 3}], Red, Disk[{-2, 3}, {1, 2/3}]},
PlotRange -> 5, Background -> Black]

2、对i进行距离变换:
a = DistanceTransform[i]
这里,把图像的黑色部分默认为背景了。
前景全部变成了白色区域,背景保持为黑色。

3、j = Rasterize@
Graphics[{Black, Disk[{0, 0}, {2, 3}], Red,
Disk[{-2, 3}, {1, 2/3}]}, PlotRange -> 5, Background -> Green]
此时,进行距离变换,会有什么效果呢?

4、b = DistanceTransform[j]
仍旧把黑色默认为背景,而别的颜色的区域都视为前景。

5、让图像里面没有黑色像素:
h = Rasterize@
Graphics[{Blue, Disk[{0, 0}, {2, 3}], Red, Disk[{-2, 3}, {1, 2/3}]},
PlotRange -> 5, Background -> Green]

6、此时,Mathematica好像不能识别谁是背景,因为距离变换的结果,是空白的。
c = DistanceTransform[h]

7、此时,每一个像素值,都是1。
ImageData[c][[101 ;; 136, 101 ;; 136]] // MatrixForm

1、找出图像a里面的像素的最大值,就可以确定,前景里面,到背景最远的点的位置:
data = ImageData[a];
{u, v} = Dimensions[data];
MaximalBy[
Flatten[Table[{m, n, data[[m, n]]}, {m, u}, {n, v}], 1], Last]

2、对图像进行标准化处理,也就是按比例缩小a各像素的值,使最大值不超过1。
ImageAdjust[a]


3、图像配准还可以这样:
a/Max@Flatten@ImageData[a]

1、给出下图。

2、距离变换。
只保留黑色部分,其余颜色变成了白色。

3、图像配准。
