基于极大似然坐标的图像变形的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}
} 

评论
 上一篇
男孩,鼹鼠,狐狸和马 男孩,鼹鼠,狐狸和马
《男孩、鼹鼠、狐狸和马》是一部感人至深的动画短片,改编自英国作家查理·麦克西(Charlie Mackesy)的同名绘本。这部作品以其温暖的画风、简洁的对白和深刻的哲理内涵广受欢迎,传递了关于友情、勇气、爱与自我接纳的普世价值。
2024-10-12
下一篇 
从复平面上域的多项式函数生成调和函数 从复平面上域的多项式函数生成调和函数
本文介绍了如何从复平面上的多项式函数生成调和函数,通过Matlab代码可视化了多项式函数的实部和虚部,展示了调和函数的特性。
2023-12-20