반응형

Random Scale

Random Scaling가 이미지를 변형시키는 기본적인 아이디어는 기본적인 scaling 방식을 부분적으로 그리고 무작위 하게 적용하는 것이다. 위 두 가지 특성으로 Random Scaling 알고리즘이 하나의 원본 이미지에 적용될 때마다 항상 서로 다른 변형이 일어나게 된다.

 

 

Intro에서 고안한 random scale 알고리즘 초안.

 

우선, Intro에서 생각했던 ( 축으로 random 만큼 이동, 해당 범위를 random' 만큼 scale ) 방식은

구현해본 결과 너무 비효율적이었다. 

처음 부터 끝까지 random하게 scaling을 하며 마지막에 원본 이미지 size를 유지해야 했기 때문에,

이미지 편집(cv2.resize) 과정도 심각하게 많아지는 경우가 생겼으며

구현에 요구되는 인자들의 값도 복잡해졌다.

 

Try 2 : Random Scale (Code)

따라서 다른 효율적인 random scale 방법을 고민한 결과

사용자가 지정한 만큼의 Line을 이미지에 고르게 분포시킨 뒤, 

각각의 Line들을 이용하여 scale하는 방법을 시도해 보았다.

 

자세한 알고리즘 설명은 아래 접은글에 기록되어 있다.

더보기

우선 Random Scaling을 적용할 축(x, y)을 무작위로 선정한다. 이후에 이미지를 동일한 간격으로 분할하는 기준선들의 좌표들을 추정한다. 이때, 간격은 pixel 단위이며 원본 이미지의 크기에 따라 적절한 값을 지정받게 된다. Random Scaling 적용 축과 기준선이 정해지면 각 기준선의 평행을 유지하며 random 값만큼 이동시키며 양쪽의 이미지 파트를 scaling 하며, 각 기준선의 이동 방향도 무작위 하게 정해진다. 이 과정에서 각 이미지 파트에 대한 scaling 범위가 너무 작으면 변형이 거의 없고, 반대의 경우는 원본의 특징이 과하게 훼손되므로 지정한 pixel 간격의 1/4에서 1/2사이에서 scaling되도록 하였다. 또한 본 알고리즘은 기준선에 따라 분할된 양쪽의 이미지 파트가 Trade-off하게 증가 또는 감소 scaling 되므로 최종적으로 Random Scaling이 적용된 이미지는 추가적인 resize없이 원본과 같은 크기로 유지된다.

 

줄의 간격은 두 줄 사이에 포함되는 pixel의 개수이며,

이 값은 사용자 지정값(distOfLines)으로 두었다.

 

또한 각 line이 밀릴 수 있는 범위는 다음 두 가지 경우를 배제하도록 산정했다.

1. 원본과 거의 유사할 수 있는 범위

2. 원본과 너무 달라져 알아보기 힘들 정도의 범위

최소(line 간격 / 4) ~ 최대(line 간격 / 2)

 

 

다음은 구현한 코드로 줄 간격값을 (width, height)방향으로 각각

Line 간격을 20pixels ~ 120pixels 로 20 pixels씩 증가하며 실행한 결과이다.

 

width 축 random scale
height 축 random scale

간격값이 커질수록 변화도 커질 가능성이 크지만 random 하게 scale되는 특성상 항상 그렇진 않다.

 

우선, 더 효율적인 random scale 방법이 떠오르지 않는 한, 이 알고리즘을 사용하여 

실험을 진행할 생각이다.

 

 

 

반응형

+ Recent posts