View Full Version : Getting rid of rainbow / chroma noise?
MasterTape
5th May 2026, 17:25
I capture with a Panasonic HS860, and have the settings to SOFT with 3D DNR turned off to get the most detail. But more detail means more junk to get rid of! What is the best way to remove rainbow blotches from the picture?
I've tried Derainbow but found it muted the reds a bit too much, and it only works with YV12, when i want to maintain the 4:2:2 (YV16 colours)
geometer
5th May 2026, 17:50
Can you post 2 frames with different looking issues?
Probably there is wrong chroma shift, and additionally, chroma echo which should appear at the right side of a colored shape.
You can shift back, and you can subtract the echo (e.g. with convolution).
Color blur is a notorious issue because of the recording technology that uses much smaller bandwith to encode and store the chroma.
Also, there are tools that reduce chroma intensity alongside edges. Might look a bit pale, but sometimes better than rainbows and color-bleed.
Subsampling sadly ruins the image permanently, you are lucky if it is not too ugly.
MasterTape
5th May 2026, 19:28
I was primarily referring to the rainbows, i know how to shift chroma. Though i do have another issue with the Y/C not separating properly after capturing with S-Video which gives off a checkered looking pattern in bright colours.
real.finder
5th May 2026, 21:55
what about https://forum.doom9.org/showthread.php?p=2029951#post2029951 ?
..... Though i do have another issue with the Y/C not separating properly after capturing with S-Video which gives off a checkered looking pattern in bright colours.
This is typical for poor quality S-Video cables which produce chroma -> luma crosstalk. Use high quality properly screened S-Video cables. Keep it short. Avoid any source for Y/C wire crosstalk like unscreened wire sections in connector adaptors or similar.
P.S. And upload pictures and videos to a file hoster as it can take ages before attachments get approved here.
real.finder
14th May 2026, 16:05
checkered looking pattern in bright colours.
btw, some newer and sharper capture card will give that "checkered looking pattern in bright colours" which called "Dot Crawl"
I find that for VHS Dot Crawl this method is work nice (It doesn't hurt the details and reduces the annoyance of the Dot Crawl)
TurnLeft().vinverse().TurnRight().MergeChroma(last)
geometer
14th June 2026, 13:52
Meanwhile we are lucky to see the pics approved.
The first one is black and white anyway, so the color artifacts should disappear with nulling the chroma signal.
But there is ringing, and you might try my function about it.
( that one is tested to run under the format of ..... ....ConvertToYUV444(matrix="PC.709", interlaced=false,chromaresample="lanczos4") .convertbits(12) .. not sure which other formats would work )
the second example suffers mainly from chroma echo. this needs to be tackled first, then other attempts may follow.
a strucure to fight this may look as follows:
#-- this needs mirrorborder 8 and respective cropping at the end.
# the convolution function can be found in my Expr convolution thread.
# the particular dimensions and intensities work for me, when I get a VHS video for processing.
cTmp = "0 0 0 0 0 0 0 0 0 0 -30 0 0 5 150 0 0 0 0 0 0 0 0 0 0"
cTmp1 = "0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0"
last = SharpChromaX(last, cTmp) # shift chroma to one end of the 5x5 and subtract echo on the other end so we target a distance of 4.
last = SharpLumaX(last, cTmp1) # dummy luma shift required
#---
function SharpLumaX(clip In, string kernel) {
In = Conv5x5(In, kernel, "luma", "out=in")
return In
}
function SharpChromaX(clip In, string kernel) {
In = Conv5x5(In, kernel, "chroma", "out=in")
return In
}
#---
Function AddMirrorBorders(clip In, int "width_") {
width_ = Default(width_, 4)
left = In.Crop(0, 0, width_, In.Height).FlipHorizontal()
right = In.Crop(In.Width-width_, 0, width_, In.Height).FlipHorizontal()
top = In.Crop(0, 0, In.Width, width_).FlipVertical()
bottom = In.Crop(0, In.Height-width_, In.Width, width_).FlipVertical()
# Combine everything
In = StackHorizontal(StackVertical(top, In, Bottom), right.Addborders(0,width_,0,width_))
In = StackHorizontal(left.Addborders(0,width_,0,width_), In)
return In
}
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.