이미지의 일부를 조정해야 하는 경우가 많으며 이러한 조정은 원활하고 대화형으로 이루어져야 합니다. Photoshop Liquify 필터의 Forward Warp 도구는 그러한 도구이며 매우 유용합니다. 유사한 도구에는 Meitu Xiuxiu의 얼굴 슬리밍 기능이 있습니다. 이 문서에서는 이러한 도구 뒤에 있는 원리와 알고리즘을 설명합니다.
먼저 Meitu Xiuxiu를 예로 들어 순방향 변환 기능을 간략하게 설명합니다.
먼저 마우스를 사용하여 원형 선택을 제어합니다.
그런 다음 마우스 왼쪽 버튼을 클릭하고 특정 방향으로 드래그하여 부드러운 앞으로 변형 그림을 만듭니다.
이 도구를 사용하면 사진의 일부를 조정할 수 있으므로 상대적으로 자유도가 높아 더욱 실용적입니다.
다음은 이러한 알고리즘의 원리를 설명합니다.
위 그림에서 음영 처리된 링은 반경이 rmax인 원형 선택을 나타냅니다. 그 중 C점은 마우스를 클릭했을 때의 지점으로 원형 선택의 중심이 됩니다. C에서 M으로 마우스를 드래그하면 이미지의 U 지점이 X 지점으로 변환됩니다. 따라서 핵심 문제는 위 변환의 역변환을 찾는 것입니다. 점 , U의 픽셀 값을 찾습니다. 원형 선택의 각 픽셀을 평가함으로써 변환된 이미지를 얻을 수 있습니다.
Andreas Gustafsson의 Interactive Image Warping 기사에서는 다음과 같은 역변환 공식을 제공합니다.
이 Warping 알고리즘의 특징은 다음과 같습니다.
1 원형 선택 영역 내의 이미지가 변형됩니다
2 원의 중심에 가까울수록 변형이 크고, 가장자리에 가까울수록 변형이 작아지며, 경계 부분에는 변형이 없습니다
3 변형이 원활합니다
구체적인 구현 단계는 다음과 같습니다.
1 원형 선택의 각 픽셀에 대해 R, G 및 B 구성 요소를 꺼내서 3개의 버프(rBuff, gBuff, bBuff)(즉, 3개의 버프는 각각 선택 항목에 있는 원본 이미지의 R, G, B 채널 값을 저장합니다)
2 각 픽셀에 대해 X 원형 선택에서
2.1 위 식에 따라 변형 전 정확한 위치 좌표 값 U
를 계산합니다. 2.2 보간법을 사용하여 U 위치에서 R을 계산합니다. U의 위치와 rBuff, gBuff, bBuff의 값 G, B 및 기타 구성 요소
2.3 R, G, B 및 기타 구성 요소를 의 픽셀 값으로 새 픽셀로 합성합니다. 위의 내용을 바탕으로 쉽게 작성할 수 있습니다. 이런 문제를 해결하려면 중요한 것은 코드가 아니라 아이디어와 알고리즘입니다.
다음은 제가 구현한 시연입니다.
위 그림에서 왼쪽 상단이 원본 이미지이고, 오른쪽 하단이 변형된 이미지입니다. 영상. 빨간색 원은 변형 영역을 둘러쌉니다. 보시다시피 변형이 매우 부드럽습니다. 위 알고리즘에 변형강도 s(strength)를 도입했는데, 위 그림에서는 강도=20입니다.
강도를 도입하려면 공식을 수정해야 합니다. 수정된 공식 버전은 다음과 같습니다.
결과 보기——
원본 사진:
변형, 강도=20:
변형, 강도=120:
Photoshop과 Meitu Xiuxiu의 이 기능은 지속적으로 변형할 수 있습니다. 이 연속적인 변형은 일련의 기본 변형에 의해 직렬로 연결되어 있는 것 같습니다. 즉, 마우스를 M0에서 Mn 위치로 드래그하면 M0->Mn 변환이 계산될 뿐만 아니라 마우스 궤적에 일련의 중간 변환이 도입됩니다. Point, M1, M2...Mn-1을 선택한 다음 M0->M1, M1->M2,..., Mn-1->Mn과 같은 이미지에 대한 일련의 변환을 수행합니다.
더 많은 이미지 변형 알고리즘: Photoshop 액화 도구 상자에서 전방향 변형 도구 구현, 관련 기사는 PHP 중국어 웹사이트를 참고하세요!