matlab練習程式(紋理合成)

2021-09-08 14:18:27 字數 1101 閱讀 8905

關於紋理合成最經典的**應該就數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裡面,...