YUV 4: 2: 0 phẳng trông như thế này:
----------------------
| Y | Cb|Cr |
----------------------
nơi:
Y = width x height pixels
Cb = Y/4 pixels
Cr = Y/4 pixels
Total num pixels (bytes) = width * height * 3/2
Và subsamling sử dụng như thế này:

Điều này có nghĩa là mỗi giá trị chroma-pixel được chia sẻ giữa 4 luma-pixel.
Một cách tiếp cận chỉ là xóa pixel, đảm bảo rằng mối quan hệ Y-Cb-Cr tương ứng được lưu giữ/tính toán lại.
Thứ gì đó gần với Nearest-neighbor interpolation nhưng được đảo ngược.
cách tiếp cận khác là lần đầu tiên chuyển đổi 4: mẫu phụ 0-4:: 2 4: 4

Ở đây bạn có 1-1 ánh xạ giữa dữ liệu luma và chroma.
Đây là cách chính xác để nội suy sắc độ giữa 4: 2: 0 và 4: 2: 2 (luma đã ở độ phân giải chính xác) Mã trong python, theo liên kết html cho c-dito. Mã không phải là rất pythonic, chỉ là một bản dịch trực tiếp của phiên bản c.
def __conv420to422(self, src, dst):
"""
420 to 422 - vertical 1:2 interpolation filter
Bit-exact with
http://www.mpeg.org/MPEG/video/mssg-free-mpeg-software.html
"""
w = self.width >> 1
h = self.height >> 1
for i in xrange(w):
for j in xrange(h):
j2 = j << 1
jm3 = 0 if (j<3) else j-3
jm2 = 0 if (j<2) else j-2
jm1 = 0 if (j<1) else j-1
jp1 = j+1 if (j<h-1) else h-1
jp2 = j+2 if (j<h-2) else h-1
jp3 = j+3 if (j<h-3) else h-1
pel = (3*src[i+w*jm3]
-16*src[i+w*jm2]
+67*src[i+w*jm1]
+227*src[i+w*j]
-32*src[i+w*jp1]
+7*src[i+w*jp2]+128)>>8
dst[i+w*j2] = pel if pel > 0 else 0
dst[i+w*j2] = pel if pel < 255 else 255
pel = (3*src[i+w*jp3]
-16*src[i+w*jp2]
+67*src[i+w*jp1]
+227*src[i+w*j]
-32*src[i+w*jm1]
+7*src[i+w*jm2]+128)>>8
dst[i+w*(j2+1)] = pel if pel > 0 else 0
dst[i+w*(j2+1)] = pel if pel < 255 else 255
return dst
Chạy hai lần này để nhận 4: 4: 4. Sau đó, việc xóa hàng và cột chỉ là vấn đề. Hoặc bạn chỉ có thể tăng gấp bốn lần pixel chroma-pixel để đi từ 4: 2: 0 đến 4: 4: 4, loại bỏ các hàng và cột và sau đó giá trị trung bình 4 Cb/Cr thành 1 để quay lại 4: 2: 0 lần nữa, tất cả phụ thuộc vào mức độ nghiêm ngặt của bạn :-)
Nguồn
2013-06-19 20:51:29
Bạn không phải đi tới 4: 4: 4 và quay lại 4: 2: 0. Bước cuối cùng đó sẽ làm mẫu lại hình ảnh và giảm chất lượng. Chỉ cần chia các colourplanes: http://stackoverflow.com/questions/17187193/resize-downsize-yuv420sp-image/30659193#30659193 –