| 130 # Translation from target to source coordinates |
130 # Translation from target to source coordinates |
| 131 vxʹ = (imx-bx)/2 - v[1] |
131 vxʹ = (imx-bx)/2 - v[1] |
| 132 vyʹ = (imy-by)/2 - v[2] |
132 vyʹ = (imy-by)/2 - v[2] |
| 133 |
133 |
| 134 # Target image indices within source image |
134 # Target image indices within source image |
| 135 px = max(ceil(Int, max(1, vxʹ + 1) - vxʹ), 1) |
135 px = min(max(ceil(Int, max(1, vxʹ + 1) - vxʹ), 1), bx) |
| 136 py = max(ceil(Int, max(1, vyʹ + 1) - vyʹ), 1) |
136 py = min(max(ceil(Int, max(1, vyʹ + 1) - vyʹ), 1), by) |
| 137 qx = min(floor(Int, min(imx, vxʹ + bx) - vxʹ), bx) |
137 qx = max(min(floor(Int, min(imx, vxʹ + bx) - vxʹ), bx), 1) |
| 138 qy = min(floor(Int, min(imy, vyʹ + by) - vyʹ), by) |
138 qy = max(min(floor(Int, min(imy, vyʹ + by) - vyʹ), by), 1) |
| 139 |
139 |
| 140 @inbounds begin |
140 @inbounds begin |
| 141 b[1:px-1, :] .= 0 |
141 b[1:px-1, :] .= 0 |
| 142 b[qx+1:end, :] .= 0 |
142 b[qx+1:bx, :] .= 0 |
| 143 |
143 |
| 144 Threads.@threads for i=px:qx |
144 Threads.@threads for i=px:qx |
| 145 b[i, 1:py-1] .= 0 |
145 b[i, 1:py-1] .= 0 |
| 146 b[i, qy+1:end] .= 0 |
146 b[i, qy+1:by] .= 0 |
| 147 @simd for j=py:qy |
147 @simd for j=py:qy |
| 148 b[i, j] = interpolate2d_quadrants(im, (i+vxʹ, j+vyʹ)) |
148 b[i, j] = interpolate2d_quadrants(im, (i+vxʹ, j+vyʹ)) |
| 149 end |
149 end |
| 150 end |
150 end |
| 151 end |
151 end |