zoukankan      html  css  js  c++  java
  • matlab练习程序(纹理合成)

    关于纹理合成最经典的论文应该就数EfrosTexture Synthesis by Non-parametric Sampling这篇论文了,引用量近2000。

    这里的合成是基于样例的,就是先有一个小的纹理图像,然后合成一个大的。

    我个人的理解是,先产生一个大的随机图像,然后对随机图像中每个像素及其邻域像素和小的纹理图像做对比,找出随机图像当前邻域和小的纹理图像最接近的邻域,然后将小的纹理图像最接近的像素赋值给大的随机图像。这样每处理一个随机图像中的像素,就需要遍历小的纹理图像的所有像素,所以运行时间是很慢的。

    先看下效果:

    小的纹理图像:

    合成的纹理图像:

    matlab代码如下:

    clear all;
    close all;
    clc;
    
    mask=mat2gray(imread('wen.jpg'));   %小的纹理图像
    [m n]=size(mask);
    
    imgn=mat2gray(rand(256,256));   %最终需要的大的纹理图像,现在是随机图像
    
    w=2;            %L邻域长的半径
    I=[1 1 1 1 1;
       1 1 1 1 1;
       1 1 0 0 0];  %L邻域,这里是5*3的,当然也可以是7*4或9*5for i=1+w:256
        for j=1+w:256-w
            
            mi=inf;
            for p=1+w:m
                for q=1+w:n-w
                    tmp=mean2(abs(imgn(i-w:i,j-w:j+w).*I-mask(p-w:p,q-w:q+w).*I));             
                    if tmp<mi       %取差别最小的像素
                       mi=tmp;
                       ii=p;
                       jj=q;
                    end
                end
            end        
            imgn(i,j)=mask(ii,jj);
            
        end
    end
    
    figure;
    imshow(imgn,[]);

    参考博客:http://blog.sina.com.cn/s/blog_50a6faf801009fry.html

  • 相关阅读:
    tomcat启动问题
    索引优化
    itext转PDF(二)
    itext转pdf(一)
    定时器quartz配置文件
    hibernate自动去别名问题
    win10安装mysql 8.0.19 (解压方式)
    把数据按列拆分为数据表
    程序记时
    find的应用
  • 原文地址:https://www.cnblogs.com/tiandsp/p/3063685.html
Copyright © 2011-2022 走看看