#fukagraphcut. [fuka_graphcut]Graph Cut

[fuka_graphcut]Graph Cut

说明 w*h有这样的二值图像。虽然在这个图像上画了画,但是有人恶作剧地部分地替换了白色和黑色的像素值。为了复原原来的图像,后天调查了各种文献,结果使用了以下的方法。

噪音(被恶作剧的像素)视为足够少。 设被恶作剧的图像的(x,y)的像素值为Y(x,y)。 复原后的图像的(x,y)的像素值为X(x,y)。 将(x,y)的4附近(上下左右)设为d(x,y)。 式

考虑问题

选择使E最小的复原后的图像是最好的。 顺便提一下,式的前半部分为了不改变图像而发挥作用,后半部分为了不使颜色剧烈变化而发挥作用。 方法定下来了,所以决定写程序复原画。

输入

输入由多个测试用例组成。输入的结束用只包含4个0的行来表示。各测试用例以以下形式给出。

h w λ κ
Y(1,1)Y(2,1)...Y(w,1)
Y(1,2)Y(2,2)...Y(w,2)
  ...
Y(1,h)Y(2,h)...Y(w,h)

1<=h,w<=50 0.000<λ,κ<=1.000

λ、κ以0.001刻度给出。

测试用例的第一行有两个整数h,w和写有2个实数λ,κ。w,h分别表示图像的横幅和纵幅,λ、κ表示最小化的目的公式E的参数。

继续h每一行.と#由构成的长度w的字符串。Y(x,y)是被恶作剧后的图像的(x,y)的像素值,.表示0,#表示1

测试用例的数量可以保证每个文件在300个以下。另外,每个文件都可以保证一个文件的数量。w*h可以保证合计在8,000以下。

输出

对于各测试用例,将赋予最小值的E输出到一行,如下所示h将在行中赋予其最小值的像素的分配以与输入相同的形式输出。误差以绝对误差或相对误差。10-6为止被允许。当有多个给出最小值的分配时,输出任何一个都可以。

样例输入

10 10 0.4000 0.20
.##...###.
.##.####..
.######...
.#.#.####.
######....
##.##.....
....#.....
..####.#..
.#####.##.
.#####.##.
25 38 0.5 0.24
...........#...............#..........
...........###..........####..........
....##.....#####.......####...........
.....##.....###############.....##....
............#####.###.#####......#....
............#########.####............
.....##......#########.###............
....##......#####.#########........#..
....#......##.##..####..####..........
.......#...###########.#####...#......
.......##.##################..##......
........#####.####.##.######.##.......
..........####################........
.........##.##..########..#####.......
.......######....##..#....###.##......
......###.####...##.##..#####.##.#....
....###..##..#...#####..#..########...
..####..###.....#######......#######..
...#######......#######........###....
..####.........##.######........###...
...............###...###..............
..............#######..#...#...##.....
.........#....##########...#....#.....
..#.....##.....########...............
...............########...............
0 0 0 0

示例输出

11.200000
.##...###.
.##.####..
.######...
.######...
######....
##.##.....
....#.....
..####....
.#####.##.
.#####.##.
73.540000
...........#...............#..........
...........###..........####..........
...........#####.......####...........
............###############...........
............###############...........
............##############............
.............#############............
............###############...........
...........#################..........
.......#...#################...#......
.......##.##################..##......
........####################.##.......
..........####################........
.........#####..########..#####.......
.......######....#####....######......
......########...#####..########.#....
....#######..#...#####..#..########...
..#########.....#######......#######..
...#######......#######........###....
..####.........#########........###...
...............#########..............
..............##########..............
..............##########..............
...............########...............
...............########...............