Hello,

I’m working with images, and I’m seeing some strange behaviour on Jacobian computation, so I suspect my function formulation is incorrect.

I have two patches in an image, and my function `F`

which returns a vector of differences in intensities between the patches.

The difference vector which is returned is computed as `image[ y ] - image[ g(y, x) ]`

where `x`

are the variables, and `y`

are some coordinates.

Now, if I try computing the jacobian of `F`

wrt the variables of `x`

with ForwardDiff, my Jacobian is a matrix of all zeros, implying that there is no relation between the function vector, and the input variables.

Is the way I am formulating this incorrect?

The function code:

```
function F_photometric(x̂::AbstractVector, A_data::AbstractVector, u_data::AbstractVector, imagebgr::AbstractVecOrMat, region1_coordinates::AbstractMatrix, image_dims::AbstractVector)
# A_diff = x̂[1:4] - A_data
# u_diff = x̂[5:8] - u_data
â = reshape(x̂[1:4],2,2)
region1_coordinates_int = Int.(round.(region1_coordinates[1:2,:]))
region2_coordinates = x̂[7:8] .+ â*(region1_coordinates_int .- x̂[5:6])
region2_coordinates_int = Int.(round.(region2_coordinates))
region1_indices = Array{Int64}(undef, size(region1_coordinates)[2])
region2_indices = Array{Int64}(undef, size(region2_coordinates)[2])
for j=1:size(region1_coordinates)[2]
region1_indices[j] = convert_2Dto1D_index(image_dims,region1_coordinates_int[:,j])
region2_indices[j] = convert_2Dto1D_index(image_dims,region2_coordinates_int[:,j])
end
region1_bgr = imagebgr[region1_indices]
region2_bgr = imagebgr[region2_indices]
photo_diff = region1_bgr - region2_bgr
# photo_diff_norm = reduce(vcat, photo_diff)
# print(norm(photo_diff),"\t")
return photo_diff
end
Jₒ = ForwardDiff.jacobian(x̂ -> F(x̂, A_data, u_data, image_bgr, region1, img_dims), x̂)
```