*Memos:
- My post explains ElasticTransform() about
alpha
andfill
argument. - My post explains ElasticTransform() about
sigma
andfill
argument. - My post explains ElasticTransform() about
alpha
,sigma
andfill
argument. - My post explains OxfordIIITPet().
ElasticTransform() can do random morphological transformation for an image as shown below. *It's about no arguments, alpha
argument with sigma=0.1
and sigma
argument with alpha=0
:
*Memos:
- The 1st argument for initialization is
alpha
(Optional-Default:50.0
-Type:int
,float
ortuple
/list
(int
orfloat
)): *Memos:- It can do morphological transformation.
- It's the magnitude of displacements
[number, number]
. - A tuple/list must be the 1D with 1 or 2 elements.
- A single value(
int
,float
ortuple
/list
(int
orfloat
)) means[alpha, alpha]
.
- The 2nd argument for initialization is
sigma
(Optional-Default:5.0
-Type:int
,float
ortuple
/list
(int
orfloat
)): *Memos:- It's the smoothness of displacements
[number, number]
. - It must be
0 < number
. *A sigle value ofnumber <= 0
works which may be error. - A tuple/list must be the 1D with 1 or 2 elements.
- A single value(
int
,float
ortuple
/list
(int
orfloat
)) means[sigma, sigma]
.
- It's the smoothness of displacements
- The 3rd argument for initialization is
interpolation
(Optional-Default:InterpolationMode.BILINEAR
-Type:InterpolationMode): *Memos:-
NEAREST
,BILINEAR
andBICUBIC
modes can be used. - My post explains InterpolationMode with and without anti-aliasing.
-
- The 4th argument for initialization is
fill
(Optional-Default:0
-Type:int
,float
ortuple
/list
(int
orfloat
)): *Memos:- It can change the background of an image. *The background can be seen when doing morphological transformation for an image.
- A tuple/list must be the 1D with 1 or 3 elements.
- If all values are
x <= 0
, it's black. - If all values are
255 <= x
, it's white.
- The 1st argument is
img
(Required-Type:PIL Image
ortensor
(int
/float
/complex
/bool
)): *Memos:- A tensor must be 3D or more D.
- Don't use
img=
.
-
v2
is recommended to use according to V1 or V2? Which one should I use?.
from torchvision.datasets import OxfordIIITPet from torchvision.transforms.v2 import ElasticTransform from torchvision.transforms.functional import InterpolationMode et = ElasticTransform() et = ElasticTransform(alpha=50, sigma=5, interpolation=InterpolationMode.BILINEAR, fill=0) et # ElasticTransform(alpha=[50.0, 50.0], sigma=[5.0, 5.0], # interpolation=InterpolationMode.BILINEAR, fill=0) et.alpha # [50.0, 50.0] et.sigma # [5.0, 5.0] et.interpolation # <InterpolationMode.BILINEAR: 'bilinear'> et.fill # 0 origin_data = OxfordIIITPet( root="data", transform=None # transform=ElasticTransform(alpha=0, sigma=0) ) noargs_data = OxfordIIITPet( # `noargs` is no arguments. root="data", transform=ElasticTransform() ) a0s01_data = OxfordIIITPet( # `a` is alpha and `s` is sigma. root="data", transform=ElasticTransform(alpha=0, sigma=0.1) ) a50s01_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=50, sigma=0.1) ) a100s01_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=100, sigma=0.1) ) a200s01_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=200, sigma=0.1) ) a500s01_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=500, sigma=0.1) ) a1000s01_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=1000, sigma=0.1) ) a5000s01_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=5000, sigma=0.1) ) a10000s01_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=10000, sigma=0.1) ) a0s1_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=0, sigma=1) ) a0s5_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=0, sigma=5) ) a0s10_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=0, sigma=10) ) a0s20_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=0, sigma=20) ) a0s40_data = OxfordIIITPet( root="data", transform=ElasticTransform(alpha=0, sigma=40) ) import matplotlib.pyplot as plt def show_images1(data, main_title=None): plt.figure(figsize=[10, 5]) plt.suptitle(t=main_title, y=0.8, fontsize=14) for i, (im, _) in zip(range(1, 6), data): plt.subplot(1, 5, i) plt.imshow(X=im) plt.xticks(ticks=[]) plt.yticks(ticks=[]) plt.tight_layout() plt.show() show_images1(data=origin_data, main_title="origin_data") print() show_images1(data=noargs_data, main_title="noargs_data") show_images1(data=noargs_data, main_title="noargs_data") show_images1(data=noargs_data, main_title="noargs_data") show_images1(data=noargs_data, main_title="noargs_data") show_images1(data=noargs_data, main_title="noargs_data") show_images1(data=noargs_data, main_title="noargs_data") show_images1(data=noargs_data, main_title="noargs_data") show_images1(data=noargs_data, main_title="noargs_data") show_images1(data=noargs_data, main_title="noargs_data") show_images1(data=noargs_data, main_title="noargs_data") print() show_images1(data=a0s01_data, main_title="a0s01_data") show_images1(data=a50s01_data, main_title="a50s01_data") show_images1(data=a100s01_data, main_title="a100s01_data") show_images1(data=a200s01_data, main_title="a200s01_data") show_images1(data=a500s01_data, main_title="a500s01_data") show_images1(data=a1000s01_data, main_title="a1000s01_data") show_images1(data=a5000s01_data, main_title="a5000s01_data") show_images1(data=a10000s01_data, main_title="a10000s01_data") print() show_images1(data=a0s01_data, main_title="a0s01_data") show_images1(data=a0s1_data, main_title="a0s1_data") show_images1(data=a0s5_data, main_title="a0s5_data") show_images1(data=a0s10_data, main_title="a0s10_data") show_images1(data=a0s20_data, main_title="a0s20_data") show_images1(data=a0s40_data, main_title="a0s40_data") # ↓ ↓ ↓ ↓ ↓ ↓ The code below is identical to the code above. ↓ ↓ ↓ ↓ ↓ ↓ def show_images2(data, main_title=None, a=50, s=5, ip=InterpolationMode.BILINEAR, f=0): plt.figure(figsize=[10, 5]) plt.suptitle(t=main_title, y=0.8, fontsize=14) if main_title != "origin_data": for i, (im, _) in zip(range(1, 6), data): plt.subplot(1, 5, i) et = ElasticTransform(alpha=a, sigma=s, interpolation=ip, fill=f) plt.imshow(X=et(im)) plt.xticks(ticks=[]) plt.yticks(ticks=[]) else: for i, (im, _) in zip(range(1, 6), data): plt.subplot(1, 5, i) plt.imshow(X=im) plt.xticks(ticks=[]) plt.yticks(ticks=[]) plt.tight_layout() plt.show() show_images2(data=origin_data, main_title="origin_data") print() show_images2(data=origin_data, main_title="noargs_data") show_images2(data=origin_data, main_title="noargs_data") show_images2(data=origin_data, main_title="noargs_data") show_images2(data=origin_data, main_title="noargs_data") show_images2(data=origin_data, main_title="noargs_data") show_images2(data=origin_data, main_title="noargs_data") show_images2(data=origin_data, main_title="noargs_data") show_images2(data=origin_data, main_title="noargs_data") show_images2(data=origin_data, main_title="noargs_data") show_images2(data=origin_data, main_title="noargs_data") print() show_images2(data=origin_data, main_title="a0s01_data", a=0, s=0.1) show_images2(data=origin_data, main_title="a50s01_data", a=50, s=0.1) show_images2(data=origin_data, main_title="a100s01_data", a=100, s=0.1) show_images2(data=origin_data, main_title="a200s01_data", a=200, s=0.1) show_images2(data=origin_data, main_title="a500s01_data", a=500, s=0.1) show_images2(data=origin_data, main_title="a1000s01_data", a=1000, s=0.1) show_images2(data=origin_data, main_title="a5000s01_data", a=5000, s=0.1) show_images2(data=origin_data, main_title="a10000s01_data", a=10000, s=0.1) print() show_images2(data=origin_data, main_title="a0s01_data", a=0, s=0.1) show_images2(data=origin_data, main_title="a0s1_data", a=0, s=1) show_images2(data=origin_data, main_title="a0s5_data", a=0, s=5) show_images2(data=origin_data, main_title="a0s10_data", a=0, s=10) show_images2(data=origin_data, main_title="a0s20_data", a=0, s=20) show_images2(data=origin_data, main_title="a0s40_data", a=0, s=40)
Top comments (0)