-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for RGB #22
Support for RGB #22
Conversation
If CI passes and there aren't any changes required regarding this approach, then it can be merged. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you please elaborate on what you want to achieve here? It's not clear to me at all and doesn't look like it's particularly efficient
Codecov Report
@@ Coverage Diff @@
## master #22 +/- ##
==========================================
- Coverage 99.18% 96.99% -2.19%
==========================================
Files 4 4
Lines 122 133 +11
==========================================
+ Hits 121 129 +8
- Misses 1 4 +3
Continue to review full report at Codecov.
|
@giordano Appvyeor needs a re-run. |
src/AstroImages.jl
Outdated
AstroImage(data::NTuple{N, Matrix{T}}, wcs::NTuple{N, WCSTransform}) where {T<:Real, N} = AstroImage{T,Gray,N}(data, wcs) | ||
AstroImage{T,color, 1, AbstractFloat}((data,), (wcs,), Properties{AbstractFloat}()) | ||
function AstroImage(color::Type{<:Color}, data::NTuple{N, Matrix{T}}, wcs::NTuple{N, WCSTransform}) where {T<:Real, N} | ||
if N == 3 && color == RGB && T <: Union{AbstractFloat, FixedPoint} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not
if N == 3 && color == RGB
if T <: Union{AbstractFloat, FixedPoint}
...
else
...
end
instead of repeating conditions multiple times?
Actually, why not using multiple method instead of having runtime checks on parameters?
src/AstroImages.jl
Outdated
return AstroImage{T,color,N, widen(T)}(data, wcs, Properties{widen(T)}(rgb_image = img)) | ||
elseif N == 3 && color == RGB | ||
img = ccd2rgb((data[1], wcs[1]),(data[2], wcs[2]),(data[3], wcs[3])) | ||
return AstroImage{T,color,N, AbstractFloat}(data, wcs, Properties{AbstractFloat}(rgb_image = img)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why the parameter is abstract here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@giordano The parameter is Abstract here for the following reasons:
- When we fixed the
MappedArrays
type forrgb_image
, the RGB subtype in it can only haveP
as anAbstractFloat
orFixedPoint
numbers. - Also, note that we are not filling
rgb_image
in all cases. So, when I simply passedT
as a parameter (as done in the previous commit), it generated errors whenT
was notAbstractFloat
orFixedPoint
. - A solution for this was to pass a valid parameter just for the sake of passing it (when
rgb_image
is not getting filled). That's what is done except in one case wherergb_image
is filled and the type isn't a valid one. The type needs to be in the above-mentioned domain as perImages.jl
.
src/AstroImages.jl
Outdated
return AstroImage{T,color, N, AbstractFloat}(data, wcs, Properties{AbstractFloat}()) | ||
end | ||
end | ||
AstroImage(data::Matrix{T}) where {T<:Real} = AstroImage{T,Gray,1, AbstractFloat}((data,), (WCSTransform(2),), Properties{AbstractFloat}()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Again, why the last parameter of the returned object is abstract?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same reason as above.
src/AstroImages.jl
Outdated
end | ||
end | ||
AstroImage(data::Matrix{T}) where {T<:Real} = AstroImage{T,Gray,1, AbstractFloat}((data,), (WCSTransform(2),), Properties{AbstractFloat}()) | ||
AstroImage(data::NTuple{N, Matrix{T}}) where {T<:Real, N} = AstroImage{T,Gray,N, AbstractFloat}(data, ntuple(i-> WCSTransform(2), N), Properties{AbstractFloat}()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same as above
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same reason as above.
src/AstroImages.jl
Outdated
end | ||
AstroImage(data::Matrix{T}) where {T<:Real} = AstroImage{T,Gray,1, AbstractFloat}((data,), (WCSTransform(2),), Properties{AbstractFloat}()) | ||
AstroImage(data::NTuple{N, Matrix{T}}) where {T<:Real, N} = AstroImage{T,Gray,N, AbstractFloat}(data, ntuple(i-> WCSTransform(2), N), Properties{AbstractFloat}()) | ||
AstroImage(data::Matrix{T}, wcs::WCSTransform) where {T<:Real} = AstroImage{T,Gray,1, AbstractFloat}((data,), (wcs,), Properties{AbstractFloat}()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Abstract parameter
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same reason as above.
src/AstroImages.jl
Outdated
AstroImage(data::Matrix{T}) where {T<:Real} = AstroImage{T,Gray,1, AbstractFloat}((data,), (WCSTransform(2),), Properties{AbstractFloat}()) | ||
AstroImage(data::NTuple{N, Matrix{T}}) where {T<:Real, N} = AstroImage{T,Gray,N, AbstractFloat}(data, ntuple(i-> WCSTransform(2), N), Properties{AbstractFloat}()) | ||
AstroImage(data::Matrix{T}, wcs::WCSTransform) where {T<:Real} = AstroImage{T,Gray,1, AbstractFloat}((data,), (wcs,), Properties{AbstractFloat}()) | ||
AstroImage(data::NTuple{N, Matrix{T}}, wcs::NTuple{N, WCSTransform}) where {T<:Real, N} = AstroImage{T,Gray,N, AbstractFloat}(data, wcs, Properties{AbstractFloat}()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Abstract parameter
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same reason as above.
@@ -44,4 +44,11 @@ end | |||
@test isapprox(red.(asinh_res), red.(asinh_ans), nans = true, rtol = 3e-5) | |||
@test isapprox(blue.(asinh_res), blue.(asinh_ans), nans = true, rtol = 3e-5) | |||
@test isapprox(green.(asinh_res), green.(asinh_ans), nans = true, rtol = 3e-5) | |||
|
|||
@testset "AstroImage using ccd2rgb" begin |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably test coverage can be improved for this new feature
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This part takes relatively large time compared to other tests. So, I wanted to keep non-redundant tests only (as AstroImage
is tested very comprehensively through other tests). Also, in the next PR, I'm adding more fields and already written more tests in this very @testset
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm a bit worried by the fact this takes a lot of time. Does it mean that performance is that bad?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reproject is the bottleneck where it takes around 20 seconds to reproject an image of size 1024*1024
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't sound like a good news
src/AstroImages.jl
Outdated
@@ -85,9 +85,21 @@ for n in (8, 16, 32, 64) | |||
end | |||
end | |||
|
|||
struct AstroImage{T<:Real,C<:Color, N} | |||
mutable struct Properties{P <: Union{AbstractFloat, FixedPoint}} | |||
rgb_image::MappedArrays.MultiMappedArray{RGB{P},2,Tuple{Array{P,2},Array{Float64,2},Array{P,2}},Type{RGB{P}},typeof(ImageCore.extractchannels)} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That Float64
should probably be P
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, missed that
I plan to add many data fields which will hold the results of operations performed on
AstroImage
. All those fields will be added tomutable struct properties
.