Firstly, if you want all non-zero, you should write findall(!iszero, x), since x.>0 will give you just positive-valued elements.
Secondly, you can convert and extract a and b like this:
julia> inds = Tuple.(findall(!iszero, x))
4-element Array{Tuple{Int64,Int64},1}:
(1, 1)
(3, 1)
(2, 2)
(3, 2)
julia> a = first.(inds)
4-element Array{Int64,1}:
1
3
2
3
julia> b = last.(inds)
4-element Array{Int64,1}:
1
1
2
2
I think it is a bit risky to rely on access to internal fields, like .I, it’s better to convert to Tuple.
Thirdly, you should ask yourself if this is really necessary. Why do you need a and b separately? Cartesian indices are constructed in such a way that they should be easy and convenient to use without destructuring them like this. Perhaps you have a good reason, but sometimes Matlab and Python users ask for this because they are not used to the way CartesianIndex works.