Krita Source Code Documentation
Loading...
Searching...
No Matches
Inpaint Class Reference

Public Member Functions

 Inpaint (KisPaintDeviceSP dev, KisPaintDeviceSP devMask, int _radius, QRect maskRect)
 
MaskedImageSP patch (void)
 
MaskedImageSP patch_simple (void)
 

Private Attributes

KisPaintDeviceSP devCache
 
MaskedImageSP initial
 
NearestNeighborFieldSP nnf_SourceToTarget
 
NearestNeighborFieldSP nnf_TargetToSource
 
QList< MaskedImageSPpyramid
 
int radius
 

Detailed Description

Definition at line 755 of file kis_inpaint.cpp.

Constructor & Destructor Documentation

◆ Inpaint()

Inpaint::Inpaint ( KisPaintDeviceSP dev,
KisPaintDeviceSP devMask,
int _radius,
QRect maskRect )
inline

Definition at line 767 of file kis_inpaint.cpp.

768 : devCache(dev)
769 , initial(new MaskedImage(dev, devMask, maskRect))
770 , radius(_radius)
771 {
772 }
MaskedImageSP initial
KisPaintDeviceSP devCache

Member Function Documentation

◆ patch()

MaskedImageSP Inpaint::patch ( void )

Definition at line 779 of file kis_inpaint.cpp.

780{
782
783 pyramid.append(initial);
784
785 QRect size = source->size();
786
787 //qDebug() << "countMasked: " << source->countMasked() << "\n";
788 while ((size.width() > radius) && (size.height() > radius) && source->countMasked() > 0) {
789 source->downsample2x();
790 //source->DebugDump("Pyramid");
791 //qDebug() << "countMasked1: " << source->countMasked() << "\n";
792 pyramid.append(source->copy());
793 size = source->size();
794 }
795 int maxlevel = pyramid.size();
796 //qDebug() << "MaxLevel: " << maxlevel << "\n";
797
798 // The initial target is the same as the smallest source.
799 // We consider that this target contains no masked pixels
800 MaskedImageSP target = source->copy();
801 target->clearMask();
802
803 //recursively building nearest neighbor field
804 for (int level = maxlevel - 1; level > 0; level--) {
805 source = pyramid.at(level);
806
807 if (level == maxlevel - 1) {
808 //random initial guess
811 } else {
812 // then, we use the rebuilt (upscaled) target
813 // and reuse the previous NNF as initial guess
814
816 new_nnf_rev->initialize(*nnf_TargetToSource);
817 nnf_TargetToSource = new_nnf_rev;
818 }
819
820 //Build an upscaled target by EM-like algorithm (see "PatchMatch" paper referenced above - page 6)
822 //target->DebugDump( "target" );
823 }
824 return target;
825}
KisMagneticGraph::vertex_descriptor target(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
QList< MaskedImageSP > pyramid
NearestNeighborFieldSP nnf_TargetToSource
KisSharedPtr< MaskedImage > copy(void)
static MaskedImageSP ExpectationMaximization(KisSharedPtr< NearestNeighborField > TargetToSource, int level, int radius, QList< MaskedImageSP > &pyramid)
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References MaskedImage::copy(), NearestNeighborField::ExpectationMaximization(), initial, NearestNeighborField::initialize(), nnf_TargetToSource, pyramid, radius, NearestNeighborField::randomize(), source(), and target().

◆ patch_simple()

MaskedImageSP Inpaint::patch_simple ( void )

Member Data Documentation

◆ devCache

KisPaintDeviceSP Inpaint::devCache
private

Definition at line 758 of file kis_inpaint.cpp.

◆ initial

MaskedImageSP Inpaint::initial
private

Definition at line 759 of file kis_inpaint.cpp.

◆ nnf_SourceToTarget

NearestNeighborFieldSP Inpaint::nnf_SourceToTarget
private

Definition at line 761 of file kis_inpaint.cpp.

◆ nnf_TargetToSource

NearestNeighborFieldSP Inpaint::nnf_TargetToSource
private

Definition at line 760 of file kis_inpaint.cpp.

◆ pyramid

QList<MaskedImageSP> Inpaint::pyramid
private

Definition at line 763 of file kis_inpaint.cpp.

◆ radius

int Inpaint::radius
private

Definition at line 762 of file kis_inpaint.cpp.


The documentation for this class was generated from the following file: