基于极大似然坐标的图像变形的MATLAB实现


This is an implementation of the paper "Maximum likelihood coordinates".

Usage

Start by cloning this repository, making sure to pass the --recursive flag to grab all the dependencies. If you forgot, then you can git submodule update --init instead.

git clone --recursive https://github.com/changqj/Maximum-Likelihood-Coordinates-2D.git mlc2d

Now, you can directly run the main.m program in MATLAB, after a few seconds you will see a GUI interface. Then you can set a target polygon by loading from file or dragging the vertices with the mouse. Select the type of barycentric coordinates through the buttons below. loading from file dragging

Due to the rough processing in MATLAB GUI, the visualization image in the MATLAB GUI is blurry, but a clear image can be obtained in MeshLab (or other visualization tools) through .obj, the deformed image file will be generated in real time in /data/ folder and stored in textured .obj format.

Example

source image mean value coordinates iterative coordinates harmonic coordinates
maximum entropy coordinates (prior 1) maximum entropy coordinates (prior 2) maximum likelihood coordinates maximum likelihood without scaling

Basis function

You can visualize the basis functions in two ways:

  • diaplay through the figure window of MATLAB

    showbase(n,mlcoors,tri(:,2:4),xx,yy,v0)

  • display with other visualization software by generating textured .obj file.

    % to plot the base functions
    
    
    name = 'mlc';
    
    z = mlcoors';   % n x #
    
    % set a mtl file
    fid = fopen(['data/base_texture.obj.mtl'],'w');
    fprintf(fid,'# Generated by MATLAB\n');
    fprintf(fid,'# Wavefront material file\n');
    fprintf(fid,'newmtl material_0\n');
    fprintf(fid,'Ka 0.200000 0.200000 0.200000\n');
    fprintf(fid,'Kd 0.752941 0.752941 0.752941\n');
    fprintf(fid,'Ks 1.000000 1.000000 1.000000\n');
    fprintf(fid,'Tr 1.000000\n');
    fprintf(fid,'illum 2\n');
    fprintf(fid,'Ns 0.000000\n');
    fprintf(fid,'map_Kd %s\n',[ './gbc_bar.png']);
    fclose(fid);
    
    load('colorbar_mlc.mat')
    colorbar_mlc = colorbar_mlc(end:-1:1,:);
    bar = colorbar_mlc';
    bar= repmat(bar,500,1);
    bar = reshape(bar,3,[]);
    bar = reshape(bar,3,1,[]);
    bar = permute(bar,[3 2 1]);
    bar= repmat(bar,1,50);
    imwrite(bar,['data/gbc_bar.png']);
    
    % close(2)
    for i = 1:size(z,2)
    
        bar_uv = [ones(length(xx),1)*0.5,z(:,i)];
        writeOBJ(['data/' name '_bf_' num2str(i) '.obj'],[xx 1-yy ...
            zeros(length(xx),1)],...
            tri(:,[4 3 2]),bar_uv);
        fid = fopen(['data/' name '_bf_' num2str(i) '.obj'],'a');
        fprintf(fid,['mtllib ./','base_texture.obj.mtl\n']);
        fclose(fid);
    
    
    end

    After executing the above code, the .obj file of the basis functions will be in the /data/ folder.

Citation

@Article{Chang:2023:MLC,
	author	=	{Qingjun Chang and Chongyang Deng and Kai Hormann},
	title 	= 	{Maximum likelihood coordinates},
	journal	=	{Computer Graphics Forum},
	volume	=	42,
	number	=	5,
	month	=	aug,
	year	=	2023,
	pages	=	{Article e14908, 13 pages},
	note	=	{Proceedings of SGP}
} 

评论