FastVision
"""
Image{N}() <: Block
[`Block`](#) for an N-dimensional image. `obs` is valid for `Image{N}()`
if it is an N-dimensional array with color or number element type.
## Examples
Creating a block:
```julia
Image{2}() # 2D-image
Image{3}() # 3D-image
```
Example valid images:
```julia
@test checkblock(Image{2}(), rand(RGB, 10, 10)) # Color image
@test checkblock(Image{2}(), rand(10, 10)) # Numbers treated as grayscale
@test checkblock(Image{3}(), rand(Gray{N0f8}, 10, 10, 10)) # Grayscale 3D-image
```
The color channels (if any) are not counted as a dimension and represented
through color types like `RGB{N0f8}`:
```julia
@test !checkblock(Image{2}, rand(10, 10, 3)) # Not a 2D image
```
You can create a random observation using [`mockblock`](#):
{cell=main}
```julia
using FastAI, FastVision
FastAI.mockblock(Image{2}())
```
To visualize a 2D-image observation, use [`showblock`](#). This is supported for
both the `ShowText` and the `ShowMakie` backend.
```julia
showblock(Image{2}(), rand(RGB{N0f8}, 10, 10))
```
"""
struct
Image
{
N
}
<:
Block
end
checkblock
(
::
Image
{
N
}
,
::
AbstractArray
{
T
,
N
}
)
where
{
T
<:
Union
{
Colorant
,
Number
}
,
N
}
=
true
mockblock
(
::
Image
{
N
}
)
where
{
N
}
=
rand
(
RGB
{
N0f8
}
,
ntuple
(
_
->
16
,
N
)
)
FastAI
.
blockname
(
::
Image
{
N
}
)
where
{
N
}
=
"
Image{
$
N
}
"
setup
(
::
Type
{
Image
}
,
data
)
=
Image
{
ndims
(
getobs
(
data
,
1
)
)
}
(
)
Visualization
function
showblock!
(
io
,
::
ShowText
,
block
::
Image
{
2
}
,
obs
)
ImageInTerminal
.
imshow
(
io
,
obs
)
end