關於紋理合成最經典的**應該就數efros的texture synthesis by non-parametric sampling這篇**了,引用量近2000。
這裡的合成是基於樣例的,就是先有乙個小的紋理影象,然後合成乙個大的。
我個人的理解是,先產生乙個大的隨機影象,然後對隨機影象中每個畫素及其鄰域畫素和小的紋理影象做對比,找出隨機影象當前鄰域和小的紋理影象最接近的鄰域,然後將小的紋理影象最接近的畫素賦值給大的隨機影象。這樣每處理乙個隨機影象中的畫素,就需要遍歷小的紋理影象的所有畫素,所以執行時間是很慢的。
先看下效果:
小的紋理影象:
合成的紋理影象:
matlab**如下:
')); %小的紋理影象
[m n]=size(mask);
imgn=mat2gray(rand(256,256
)); %最終需要的大的紋理影象,現在是隨機影象
w=2; %l鄰域長的半徑
i=[111
11; 11
111;
11000]; %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=tmp;
ii=p;
jj=q;
endend
endimgn(i,j)=mask(ii,jj);
endend
figure;
imshow(imgn,);
參考部落格:
多樣化紋理合成
基於判別器和生成器建模方法的紋理合成具有很大的潛力,但是現有方法為了效率而採用的前向網路在泛化能力上並不行,即乙個網路只能合成一種紋理,缺少多樣性。本文著重解決該問題。訓練乙個多紋理合成網路存在的一些困難 不同型別紋理的統計特是完全不同,使用基於 gram 矩陣的紋理損失 1,2 只能部分的衡量其中...
matlab練習程式(DBSCAN)
和kmeans相比,不需要事先知道資料的類數。以程式設計的角度來考慮,具體演算法流程如下 1.首先選擇乙個待處理資料。2.尋找和待處理資料距離在設定半徑內的資料。3.將找到的半徑內的資料放到乙個佇列中。4.拿佇列頭資料作為當前待處理資料並不斷執行第2步。5.直到遍歷完佇列中所有資料,將這些資料記為一...
matlab練習程式(c c 呼叫matlab)
就我目前了解的c 呼叫matlab有兩種方法。第一種是通過matlab引擎呼叫,也就是這裡用到的方法。第二種是用matlab將m檔案編譯為相應的h lib dll檔案再加以呼叫。使用engine所用到的h和lib檔案基本在d program files matlab r2010b extern裡面,...