How would you remove the text from this object?

Moderator: SecondMan

User avatar
derkork
Posts: 9
Joined: Fri Aug 10, 2018 2:39 am

How would you remove the text from this object?

#1

Post by derkork » Mon Sep 10, 2018 12:08 pm

I have a photo of this airship that I want to use in a composition.
2018-09-10_20-44-18.png
I already masked the ship itself out with a spline mask. Now I would like to remove the text from the ship's body. In Photoshop this would be a few strokes with the healing brush, but I don't want to do it in Photoshop, rather I would like to learn a few tricks in Fusion. What I tried so far:
  • I used the obvious Paint tool with clone stamp. Sort of works but is very cumbersome, as the clone stamp only uses the source tool as input and not the combination of source + applied stamps, so at some point you paint the text over with itself.
  • I used a Luma keyer with a rectangle mask to make the text transparent, however I found no way of filling the holes, that would look satisfactory, so this wasn't working either.
  • Then I found the "Clean Plate" tool, used a rectangle mask to limit the effect to the area containing the text, then select the white range as background and use "Fill" to fill the holes that the text left. When pumping up the "Erode slider" this produces a decent result, if you don't look too closely.
clean_plate.png
So how would you go about removing the text with Fusion nodes, only? I solved my problem but as there always is more than one way to skin a cat, I'm curious what other approaches you would use for such and similar problems.
You do not have the required permissions to view the files attached to this post.

User avatar
intelligent machine
Fusioneer
Posts: 190
Joined: Fri May 13, 2016 10:01 pm
Location: Austin, Texas, USA
Been thanked: 36 times
Contact:

Re: How would you remove the text from this object?

#2

Post by intelligent machine » Mon Sep 10, 2018 1:50 pm

Use the 'clone multiStroke' mode in the paint tool and when you get to a point where there is overlap with the original image then click on the 'select' mode and then back on 'clone multiStroke'. Just be aware that each time you do this a new multiStroke modifier is stacked.

User avatar
ShadowMaker SdR
Fusionista
Posts: 469
Joined: Sun Sep 21, 2014 6:17 am
Been thanked: 30 times

Re: How would you remove the text from this object?

#3

Post by ShadowMaker SdR » Mon Sep 10, 2018 2:20 pm

Or use a regular stroke set to clone instead of multistroke. If I recall correctly this will let you paint over your painted result when doing a new stroke.
You could have also started out with a 4 point background that you merge over the text with a corner positioner and then colorpick the 4 colorcorners of the BG, this should give you a nice start gradient that at least matches at the corners. :-)

Added in 38 minutes 1 second:
Like this. It's a pretty clean starting point IMO. Especially since it took less than 3 minutes to set it up like this.

Code: Select all

{
	Tools = ordered() {
		Loader1 = Loader {
			Clips = {
				Clip {
					ID = "Clip1",
					Filename = "C:\\Users\\Gebruiker\\Desktop\\2018-09-10_20-44-18.png",
					FormatID = "PNGFormat",
					StartFrame = 18,
					LengthSetManually = true,
					TrimIn = 0,
					TrimOut = 0,
					ExtendFirst = 0,
					ExtendLast = 0,
					Loop = 0,
					AspectMode = 0,
					Depth = 0,
					TimeCode = 0,
					GlobalStart = 0,
					GlobalEnd = 0
				}
			},
			Inputs = {
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 432, 93 } },
		},
		Background1 = Background {
			CtrlWZoom = false,
			Inputs = {
				Width = Input { Value = 1934, },
				Height = Input { Value = 988, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				Type = Input { Value = FuID { "Corner" }, },
				TopLeftRed = Input { Value = 0.68083781003952, },
				TopLeftGreen = Input { Value = 0.790938854217529, },
				TopLeftBlue = Input { Value = 0.833541393280029, },
				TopRightRed = Input { Value = 0.730778396129608, },
				TopRightGreen = Input { Value = 0.812656044960022, },
				TopRightBlue = Input { Value = 0.846048772335052, },
				BottomLeftRed = Input { Value = 0.584313750267029, },
				BottomLeftGreen = Input { Value = 0.678431391716003, },
				BottomLeftBlue = Input { Value = 0.686274528503418, },
				BottomRightRed = Input { Value = 0.625222861766815, },
				BottomRightGreen = Input { Value = 0.709774255752563, },
				BottomRightBlue = Input { Value = 0.738086760044098, },
				Gradient = Input {
					Value = Gradient {
						Colors = {
							[0] = { 0, 0, 0, 1 },
							[1] = { 1, 1, 1, 1 }
						}
					},
				},
			},
			ViewInfo = OperatorInfo { Pos = { 425, 219 } },
		},
		CornerPositioner1 = CornerPositioner {
			Inputs = {
				TopLeft = Input {
					SourceOp = "Publish1",
					Source = "Value",
				},
				TopRight = Input {
					SourceOp = "Publish2",
					Source = "Value",
				},
				BottomLeft = Input {
					SourceOp = "Publish3",
					Source = "Value",
				},
				BottomRight = Input {
					SourceOp = "Publish4",
					Source = "Value",
				},
				Input = Input {
					SourceOp = "Background1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 535, 220 } },
		},
		Publish1 = PublishPoint {
			Inputs = {
				Value = Input { Value = { 0.515248334010024, 0.470431998136935 }, },
			},
		},
		Publish2 = PublishPoint {
			Inputs = {
				Value = Input { Value = { 0.757044121406453, 0.43396017699115 }, },
			},
		},
		Publish3 = PublishPoint {
			Inputs = {
				Value = Input { Value = { 0.489936680235188, 0.392992547741034 }, },
			},
		},
		Publish4 = PublishPoint {
			Inputs = {
				Value = Input { Value = { 0.71459952041698, 0.373871681415929 }, },
			},
		},
		Merge1 = Merge {
			Inputs = {
				Background = Input {
					SourceOp = "Loader1",
					Source = "Output",
				},
				Foreground = Input {
					SourceOp = "CornerPositioner1",
					Source = "Output",
				},
				PerformDepthMerge = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 800, 222 } },
		}
	}
}

User avatar
theotheo
Fusioneer
Posts: 248
Joined: Thu Aug 07, 2014 8:35 am
Been thanked: 50 times

Re: How would you remove the text from this object?

#4

Post by theotheo » Tue Sep 11, 2018 1:22 am

stuff like this you want to clean procedurally. Use the clean plate tool or lumakey tool to punch a hole, use clean plate or the ol blur divide trick to fill in the gap. Do a slight blur on the matte at the end.
fillcleanplate.jpg
I used the first pic in your post.

Code: Select all

{
	Tools = ordered() {
		Loader1 = Loader {
			Clips = {
				Clip {
					ID = "Clip1",
					Filename = "/Users/theo/Downloads/2018-09-10_20-44-18.png",
					FormatID = "PNGFormat",
					StartFrame = 18,
					LengthSetManually = true,
					TrimIn = 0,
					TrimOut = 0,
					ExtendFirst = 0,
					ExtendLast = 0,
					Loop = 0,
					AspectMode = 0,
					Depth = 0,
					TimeCode = 0,
					GlobalStart = 1001,
					GlobalEnd = 1001
				}
			},
			Inputs = {
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 479, 109 } },
		},
		CleanPlate1 = CleanPLate {
			Inputs = {
				Method = Input { Value = FuID { "Ranges" }, },
				RangesLowLuminance = Input { Value = 0.464, },
				RangesHighLuminance = Input { Value = 0.892, },
				Erode = Input { Value = 0.00128, },
				GrowEdges = Input { Value = 0.1402, },
				InsideFill = Input { Value = 1, },
				HoldTime = Input { Value = 1001, },
				EffectMask = Input {
					SourceOp = "Polygon1",
					Source = "Mask",
				},
				Input = Input {
					SourceOp = "Loader1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 479, 245 } },
		},
		Blur1 = Blur {
			Inputs = {
				XBlurSize = Input { Value = 6.8, },
				Input = Input {
					SourceOp = "CleanPlate1",
					Source = "Output",
				},
				EffectMask = Input {
					SourceOp = "Polygon1",
					Source = "Mask",
				}
			},
			ViewInfo = OperatorInfo { Pos = { 479, 278 } },
		},
		Polygon1 = PolylineMask {
			DrawMode = "InsertAndModify",
			DrawMode2 = "InsertAndModify",
			Inputs = {
				MaskWidth = Input { Value = 2048, },
				MaskHeight = Input { Value = 1152, },
				PixelAspect = Input { Value = { 1, 1 }, },
				ClippingMode = Input { Value = FuID { "None" }, },
				Polyline = Input {
					SourceOp = "Polygon1Polyline",
					Source = "Value",
				},
				Polyline2 = Input {
					Value = Polyline {
					},
					Disabled = true,
				},
			},
			ViewInfo = OperatorInfo { Pos = { 629, 245 } },
		},
		Polygon1Polyline = BezierSpline {
			SplineColor = { Red = 173, Green = 255, Blue = 47 },
			NameSet = true,
			KeyFrames = {
				[1001] = { 0, Flags = { Linear = true, LockedY = true }, Value = Polyline {
						Closed = true,
						Points = {
							{ Linear = true, X = -0.0155118925953448, Y = -0.114372465110983, LX = -0.00586004813080695, LY = 0.0377867724067769, RX = 0.0858324702998629, RY = -0.0101214606671842 },
							{ Linear = true, X = 0.241985518304244, Y = -0.144736847112536, LX = -0.0858324702998629, LY = 0.0101214606671842, RX = 0.00723888266604344, RY = 0.0283400828167092 },
							{ Linear = true, X = 0.263702166302374, Y = -0.0597165986624082, LX = -0.00723888266604344, LY = -0.0283400828167092, RX = -0.0989314010967133, RY = 0.0195681502572519 },
							{ Linear = true, X = -0.0330920369877656, Y = -0.00101214789065268, LX = 0.0989314010967133, LY = -0.0195681502572519, RX = 0.00586004813080695, RY = -0.0377867724067769 }
						}
					} }
			}
		}
	}
}
You do not have the required permissions to view the files attached to this post.

thibaud
Fusioneer
Posts: 111
Joined: Thu Sep 04, 2014 1:23 am
Been thanked: 1 time

Re: How would you remove the text from this object?

#5

Post by thibaud » Tue Sep 11, 2018 2:41 am

I just had to remove that bump theo left, no blur required ;)
Code: [Select all] [Expand/Collapse] [Download] (WSLsnippet-2018-09-11--11.41.34.setting)
  1. {
  2.     Tools = ordered() {
  3.         Polygon1 = PolylineMask {
  4.             ViewInfo = OperatorInfo { Pos = { 1540, 313.5 } },
  5.             DrawMode2 = "InsertAndModify",
  6.             CtrlWZoom = false,
  7.             DrawMode = "InsertAndModify",
  8.             Inputs = {
  9.                 ClippingMode = Input { Value = FuID { "None" } },
  10.                 SoftEdge = Input { Value = 0.005 },
  11.                 BorderWidth = Input { Value = 0.005 },
  12.                 Polyline = Input {
  13.                     Source = "Value",
  14.                     SourceOp = "Polygon1Polyline"
  15.                 },
  16.                 MaskWidth = Input { Value = 2048 },
  17.                 Polyline2 = Input {
  18.                     Disabled = true,
  19.                     Value = Polyline {
  20.                     }
  21.                 },
  22.                 MaskHeight = Input { Value = 1152 },
  23.                 PixelAspect = Input { Value = { 1, 1 } }
  24.             }
  25.         },
  26.         Polygon1Polyline = BezierSpline {
  27.             SplineColor = { Red = 173, Green = 255, Blue = 47 },
  28.             NameSet = true,
  29.             KeyFrames = {
  30.                 [0] = { 0, RH = { 333.666666666667, 0.333333333333333 }, Value = Polyline {
  31.                         Closed = true,
  32.                         Points = {
  33.                             { X = -0.00583912641183748, RX = 0.0758691278982326, LX = 0.00328834487746665, RY = -0.00704396763942191, Y = -0.102140136726562, LY = 0.0253735570822477 },
  34.                             { Linear = true, X = 0.22176825728286, RX = 0.00815245530411107, LX = -0.0758691278982326, RY = 0.020025441938869, Y = -0.123272039644827, LY = 0.00704396763942191 },
  35.                             { X = 0.246225623195193, RX = -0.0807256213519747, LX = -0.00733925808104499, RY = 0.012580837066821, Y = -0.0631957138282204, LY = -0.0211967892759016 },
  36.                             { X = 0.00402590822056247, RX = -0.00328834487746665, LX = 0.0807256213519747, RY = -0.0253735570822477, Y = -0.0260194654798186, LY = -0.012580837066821 }
  37.                         }
  38.                     }, Flags = { LockedY = true, Linear = true } },
  39.                 [1001] = { 1, Value = Polyline {
  40.                         Closed = true,
  41.                         Points = {
  42.                             { Linear = true, X = -0.0155118925953448, RX = 0.0858324702998629, LX = -0.00586004813080695, RY = -0.0101214606671842, Y = -0.114372465110983, LY = 0.0377867724067769 },
  43.                             { Linear = true, X = 0.241985518304244, RX = 0.00723888266604344, LX = -0.0858324702998629, RY = 0.0283400828167092, Y = -0.144736847112536, LY = 0.0101214606671842 },
  44.                             { Linear = true, X = 0.263702166302374, RX = -0.0989314010967133, LX = -0.00723888266604344, RY = 0.0195681502572519, Y = -0.0597165986624082, LY = -0.0283400828167092 },
  45.                             { Linear = true, X = -0.0330920369877656, RX = 0.00586004813080695, LX = 0.0989314010967133, RY = -0.0377867724067769, Y = -0.00101214789065268, LY = -0.0195681502572519 }
  46.                         }
  47.                     }, Flags = { LockedY = true, Linear = true }, LH = { 667.333333333333, 0.666666666666667 } }
  48.             }
  49.         },
  50.         Loader1_1 = Loader {
  51.             ViewInfo = OperatorInfo { Pos = { 1430, 346.5 } },
  52.             Clips = {
  53.                 Clip {
  54.                     Loop = 0,
  55.                     Filename = "C:\\Users\\thiba\\Desktop\\2018-09-10_20-44-18.png",
  56.                     TrimIn = 0,
  57.                     GlobalStart = 0,
  58.                     TimeCode = 0,
  59.                     GlobalEnd = 0,
  60.                     ExtendFirst = 0,
  61.                     AspectMode = 0,
  62.                     Depth = 0,
  63.                     TrimOut = 0,
  64.                     ID = "Clip1",
  65.                     FormatID = "PNGFormat",
  66.                     ExtendLast = 0,
  67.                     LengthSetManually = true,
  68.                     StartFrame = 18
  69.                 }
  70.             },
  71.             Inputs = {
  72.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" } }
  73.             }
  74.         },
  75.         CleanPlate1 = CleanPLate {
  76.             ViewInfo = OperatorInfo { Pos = { 1540, 346.5 } },
  77.             Inputs = {
  78.                 Input = Input {
  79.                     Source = "Output",
  80.                     SourceOp = "Loader1_1"
  81.                 },
  82.                 EffectMask = Input {
  83.                     Source = "Mask",
  84.                     SourceOp = "Polygon1"
  85.                 },
  86.                 Method = Input { Value = FuID { "Ranges" } },
  87.                 GrowEdges = Input { Value = 0.001 },
  88.                 HoldTime = Input { Value = 1001 },
  89.                 Erode = Input { Value = 0.005 },
  90.                 RangesLowLuminance = Input { Value = 0.15 },
  91.                 InsideFill = Input { Value = 1 }
  92.             }
  93.         }
  94.     }
  95. }