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

转载于:https://www.cnblogs.com/tiandsp/archive/2013/05/06/3063685.html

下面是一个使用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*5的 for 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,[]); ``` 这个程序的目标是将一张较小的纹理样图和一张较大的随机噪声图像进行纹理合成,使噪声图像具有和样图类似的纹理。它使用了一个L邻域算法来寻找差别最小的像素,并将其替换为样图中对应位置的像素。最后,通过imshow函数显示合成后的纹理图像。 纹理合成是一种利用计算机产生纹理的方法,它可以合成任意尺寸、大小和避免视觉重复性的纹理。它在图像压缩、多维物体纹理生成、图像降噪、图像修补、图像镶嵌等方面具有广泛的应用。 纹理合成的关键问题是确定随机过程的模型和寻找一种有效的方法来产生新的纹理。前者决定了纹理的准确性,后者决定了合成的速度。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值