바이큐빅 보간 알고리즘의 원리와 Python에서의 구현과 같습니다.
1. 이미지 쌍삼차 보간 알고리즘의 원리:
원본 이미지 A의 크기가 m*n이고, 크기가 조정된 대상 이미지 B의 크기가 M*N이라고 가정합니다. . 그런 다음 비율에 따라 A(x, y) = A( X*(m/M), Y*(n/N) )로 A에서 B(X, Y)의 해당 좌표를 얻을 수 있습니다. 이중선형 보간에서는 A(x, y)의 가장 가까운 4개 점을 선택합니다. 쌍삼차 보간법에서는 대상 영상 B(X, Y)의 픽셀 값을 계산하기 위한 매개변수로 가장 가까운 16개의 픽셀을 선택합니다. 그림과 같이:
그림과 같이 P점은 원본 이미지에 해당하는 (X, Y)에서 대상 이미지 B의 위치입니다. P의 좌표 위치는 소수 부분을 갖습니다. , 따라서 P의 좌표는 P(x u, y v)라고 가정합니다. 여기서 x와 y는 각각 정수 부분을 나타내고 u와 v는 각각 소수 부분을 나타냅니다. 그런 다음 그림에 표시된 대로 a(i, j)(i, j=0, 1, 2, 3)로 표시되는 최신 16픽셀의 위치를 얻을 수 있습니다. ?
쌍삼차 보간법의 목적은 관계 또는 계수를 찾아 P의 픽셀 값에 대한 이러한 16개 픽셀의 영향 요소를 찾아 이 영향 요소를 기반으로 대상 이미지를 얻는 것입니다. 해당 지점의 픽셀 값은 이미지 스케일링의 목적을 달성합니다.
?
BiCubic 기반 함수의 형태는 다음과 같습니다.
2. Python에서 쌍삼차 보간 알고리즘 구현
from PIL import Image
import numpy as np
import math
# 서로 다른 가중치로 16픽셀 생성
def BiBubic(x):
x= abs( x)
xlt;=1인 경우:
1-2*(x**2) (x**3) 반환
elif xlt ;2 :
반환 4-8*x 5*(x**2)-(x**3)
else:
반환 0
# 쌍삼차 보간 알고리즘
# dstH는 대상 이미지의 높이, dstW는 대상 이미지의 너비
def BiCubic_interpolation(img, dstH, dstW ):
scrH, scrW, _=img.shape
#img=np.pad(img, ((1,3), (1,3), (0, 0)),' 상수')
retimg=np.zeros((dstH, dstW, 3), dtype=np.uint8)
범위(dstH)의 i에 대해:
범위(dstW)의 j에 대해:
scrx=i*(scrH/dstH)
scry=j*(scrW/dstW)
x =math.floor(scrx)
y=math.floor(scry)
u=scrx-x
v=scry- y
tmp=0
범위(-1, 2)에 있는 ii의 경우:
범위(-1, 2)에 있는 jj의 경우:
x iilt; 0 또는 y jjlt; =scrH 또는 y jjgt;
계속
tmp =img[x ii, y jj]*BiBubic( ii-u)*BiBubic(jj-v)
retimg[i, j]=np.clip(tmp, 0, 255)
retimg 반환
im_path='../paojie.jpg'
image=np.array(Image.open(im_path))
image2=BiCubic_interpolation(이미지, 이미지 .shape[0] *2, image.shape[1]*2)
image2=Image.fromarray(i
mage2.astype('uint8')).convert('RGB')
image2.save('BiCubic_interpolation.jpg')
3. 실험 결과:
4. 참고 내용:
? blogs.com/wojianxin/p/12516762.html
? /Ibelievesunshine/article/details/104942406