matlab练习程序(纹理合成)
2013-05-06 21:00
1106 查看
关于纹理合成最经典的论文应该就数Efros的Texture Synthesis by Non-parametric Sampling这篇论文了,引用量近2000。
这里的合成是基于样例的,就是先有一个小的纹理图像,然后合成一个大的。
我个人的理解是,先产生一个大的随机图像,然后对随机图像中每个像素及其邻域像素和小的纹理图像做对比,找出随机图像当前邻域和小的纹理图像最接近的邻域,然后将小的纹理图像最接近的像素赋值给大的随机图像。这样每处理一个随机图像中的像素,就需要遍历小的纹理图像的所有像素,所以运行时间是很慢的。
先看下效果:
小的纹理图像:
合成的纹理图像:
matlab代码如下:
参考博客:http://blog.sina.com.cn/s/blog_50a6faf801009fry.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,[]);
参考博客:http://blog.sina.com.cn/s/blog_50a6faf801009fry.html
相关文章推荐
- matlab练习程序(图像序列合成视频)
- matlab练习程序(图像放大/缩小,双线性插值)
- matlab练习程序(TV模型图像修复)
- matlab练习程序(c/c++调用matlab<dll>)
- matlab练习程序(双边滤波)
- matlab练习程序(RGB2YUV、YUV2RGB)
- matlab练习程序(zs图像细化)
- matlab练习程序(粒子群优化PSO)
- matlab练习程序(最大流/最小割)
- matlab小程序练习
- matlab练习程序(steerable filters)
- 灰度图直方图均衡化(matlab练习程序)
- 《MATLAB在语音信号分析和合成中的应用》随书附带程序下载 程序打不开
- matlab练习程序(多圆交点)
- matlab练习程序(卡尔曼滤波)
- 【转载】matlab练习程序(图像Haar小波变换)
- matlab练习程序(Gabor Filter)
- matlab练习程序(随机粒子切换特效)
- matlab练习程序(区域填充算法,队列版)
- matlab练习程序(简单多边形的核)