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

评论
 本篇
基于极大似然坐标的图像变形的MATLAB实现 基于极大似然坐标的图像变形的MATLAB实现
本文介绍了极大似然坐标的MATLAB实现,通过图形用户界面实现了最大熵坐标、最大似然坐标、均值坐标、迭代坐标、调和坐标等几种坐标的图像变形。
2023-12-22
下一篇 
从复平面上域的多项式函数生成调和函数 从复平面上域的多项式函数生成调和函数
本文介绍了如何从复平面上的多项式函数生成调和函数,通过Matlab代码可视化了多项式函数的实部和虚部,展示了调和函数的特性。
2023-12-20