Search code examples
layergimp

Is there a GIMP function to remove background by combining layers with one object on different backgrounds?


In case the title confused you. I want to remove the background around the object. The boundary is rather complex, so doing it by hand is time-consuming. However, I have several images of one object on different backgrounds.

So I've put these images on different layers, so the object on each layer is in the same place. Now I would like to combine all layers in one, so the object would persist, but different layers would be removed. Is there a function/filter/script that works this way? Taking pixels from different layers and if they are different removes them or makes them (more) transparent? While pixels that don't differ are left unchanged.

I've tried "addition" and "multiply" modes for layers, but they don't work that way - they still change pixels that are "the same".


Solution

  • With two images:

    • Set the top image to Difference
    • Get a new layer from the result: Layer>New from visible
    • Color-select the black with a low threshold.

    Your selection is the pixels that are black, that are those where the difference between the images was 0, that are those that are identical in both images.

    With more images

    A solution likely uses a "median filter". Such a filter makes pixels "vote": a pixel is the most common values among the corresponding pixels in each of the source images. This is typically applied to remove random objects (tourists) in front of a fixed subject (building): take several shots, and the filter will keep the pixels from the building, removing the tourists.

    There is a median filter in the GMIC plugin/filter suite. Otherwise if you have good computer skills (some install tweaks required) there is an experimental one in Python.

    However the median filter doesn't erase the background so the technique is likely more complex than the tourist removal one. Can you show a sample picture?