tldr: Fringing happens because the subpixels are not properly aligned. It can be alleviated by "shifting" the underlying data to colocale in the center of the pixel. On the Samsung Panel, a simplistic solution to this is as follows:
green_amt = 0.2
red_amt = 0.4
blue_amt = 0.3
for i in range(1, im.shape[0]-1):
for j in range(1, im.shape[1]-1):
green_out[i, j] = green[i, j+1]*(green_amt) + green[i, j]*(1-green_amt)
red_out[i, j] = red[i, j-1]*(red_amt) + red[i, j]*(1-red_amt)
blue_out[i, j] = blue[i+1, j]*(blue_amt) + blue[i, j]*(1-blue_amt)
outim[:, :, 1] = green_out
The above ignores that green/red are a bit above the center and blue alternates between being in the left and right. Refinements are possible but for my personal usecases are not necessary at the moment.
Left is what it looks like after the filter is applied, right is before.