how to inpaint a region of interest recursively

2 ビュー (過去 30 日間)
David Levi
David Levi 2022 年 1 月 28 日
コメント済み: Image Analyst 2022 年 1 月 28 日
Hi everyone!
I have an image called 'lion.jpg' .
I did segmentation to the lions in the center using the segmentImage.m function , and got this image:
I need to inpaint the black region that was created , and I need a solution to do that recursively from outside to inside:
I tried to use the inpaintCoherent function but the result was not acually what i needed , I got this:
You can see that the inpaintCoherent function filled the area of the mountains with colored lines , and this is not good for me. I want to fille the region smoothly.
I tried to blure the region but I really dont want to do that.
I shared my code : try1.m with you, and you can see it here too:
clc;
clear;
close all;
I = imread('lion.jpg');
figure; imshow(I,[]);
[BW,mask] = segmentImage(I);
figure; imshow(BW);
bg = I - mask;
figure; imshow(bg)
figure; montage({I,BW});
%% inpaint
title(['Image to Be Inpainted',' | ','Mask for Inpainting']);
J = inpaintCoherent(I,BW,'Radius',7);
figure; imshow(J);
figure;
montage({I,J});
title(['Image to Be Inpainted',' | ','Inpainted Image']);
%% try to blur the image:
redChannel = J(:, :, 1);
greenChannel = J(:, :, 2);
blueChannel = J(:, :, 3);
% H = fspecial('disk',20);
H = fspecial('average',33);
redChannel = roifilt2(H,redChannel,BW);
greenChannel = roifilt2(H,greenChannel,BW);
blueChannel = roifilt2(H,blueChannel,BW);
rgbImage = cat(3, redChannel,greenChannel,blueChannel);
figure;
subplot(1,2,1); imshow(J); title('Inpainted Image');
subplot(1,2,2); imshow(rgbImage); title('image after blure');

採用された回答

Image Analyst
Image Analyst 2022 年 1 月 28 日
The function you want is called regionfill().
Description
J = regionfill(I,mask) fills the regions in image I specified by mask. Non-zero pixels in mask designate the pixels of image I to fill. You can use regionfill to remove objects in an image or to replace invalid pixel values using their neighbors.
J = regionfill(I,x,y) fills the region in image I corresponding to the polygon with vertices specified by x and y.
  2 件のコメント
David Levi
David Levi 2022 年 1 月 28 日
編集済み: David Levi 2022 年 1 月 28 日
First of all, thank you for your answer!
I have another one for you.
Here is the result of the regionfill function:
now I have another idea.
Is it possible to create a roi (rectangle) of the mountains near the segmented area , and replace with it the restored area? :
The motivation is to create something like this (I used Microsoft Paint....)
do you have any idea how to do it in matlab interactively?
Image Analyst
Image Analyst 2022 年 1 月 28 日
Terrain generation is not trivial. You can try image quilting:
Or you can try to generate something using Perlin noise (Google it).
Or you can just get rid of the columns with "seam carving" (Google it).
Since it looks like a one-off situation, maybe you can just interactively clone part of the image using the Clone Stamp tool in Photoshop.

サインインしてコメントする。

その他の回答 (0 件)

製品


リリース

R2021a

Translated by