String Art利用matlab用直線作畫

String Art利用matlab用直線作畫

1簡介

String Art是一種只利用釘子和線進行作畫的一種藝術,通過線的稠密度來表現不同的圖案。下圖爲藝術家Petros Vrellis的一副作品。

在這裏插入圖片描述
在2018年,一篇《String Art: Towards Computational Fabrication of String Images》的論文介紹瞭如何利用數學的方式,利用計算機輔助進行直線藝術的繪製。

文章中首先建立了像素畫直線的模型,然後利用優化模型對每個節點處線的佈置進行優化,得到期望的圖像。
在這裏插入圖片描述
本博客仿照論文中的思想,自己編程嘗試進行得到相似的結果。

2 直線模型的建立

首先將圖片進行像素化,以便之後的定量計算。

直線的像素化採用的是:計算機圖形學筆記-三種畫線算法https://blog.csdn.net/Hnubama/article/details/50927006
這篇文章中的DDA方法。

採用隨機布點的方式進行實驗,最終呈現效果如下:
在這裏插入圖片描述
爲了方便考慮重疊的情況,假設線越密集,該像素點的值越大(但不能超過某一個值)

%繪製直線算法
Ymax=100;
Xmax=100;
%畫布XY爲[0,0]到[Y,X]的0矩陣,格式爲zeros(Y,X)
XY=zeros(Ymax+1,Xmax+1);%創建畫布
%創建點,格式爲[pAx,pAy,pBx,pBy]
N=30;
pApB=zeros(N,4);
for j=1:N
    pApB(j,:)=round([Xmax*rand(),Ymax*rand(),Xmax*rand(),Ymax*rand()]);
end
%進行隨機直線繪畫
for j=1:N
    XYi=zeros(Ymax+1,Xmax+1);%創建畫布
    [xi,yi]=drawline(pApB(j,:));
    XYi(sub2ind(size(XYi),yi+1,xi+1))=0.5;
    XY=XY+XYi;
end

XY(XY>1)=1;
pcolor(XY)


function [xi,yi]=drawline(pApB)
%在畫布XY上給出直線的索引,所以pA和pB的範圍不能超出畫布
%pA,pB爲2元素整數向量,如[11,31]
pA=pApB(1:2);
pB=pApB(3:4);

dx=pB(1)-pA(1);
dy=pB(2)-pA(2);
if abs(dx)>=abs(dy)
    K=abs(dx);
    xi=round(linspace(pA(1),pB(1),K));
    yi=round(linspace(pA(2),pB(2),K));
elseif abs(dx)<abs(dy)
    K=abs(dy);
    xi=round(linspace(pA(1),pB(1),K));
    yi=round(linspace(pA(2),pB(2),K));
end
end

3 優化方法

對於一個圓形的釘子陣,對每個釘子從1到N進行編號,並假設每個釘子之間的連線最多隻有1條。則最終線之間的連接方式可以用一個對稱的矩陣表示,矩陣的數值只有0和1兩種情況,1代表所對應的行號和列號的釘子之間存在連線,0則代表沒有。
在這裏插入圖片描述
之後就可以利用矩陣的對稱性,將三角矩陣展開成一個數組。此時二維問題被簡化爲1維問題。又由於該1維數組是二進制數組,作爲優化的自變量,這個問題適合用ga(遺傳算法)進行優化。

在已知該二進制數組的情況下,也可以反向推導出輸出圖像,如下圖。
在這裏插入圖片描述

之後求出輸出圖像與原圖像的殘差,並認爲目標函數的殘差最小即爲最佳優化。

此外由於邊緣部分的一般不是很重要,所以對在寫評價函數時,利用高斯函數,賦予中心較大的權重,賦予邊緣較小的權重。

二進制ga算法採用的是Yarpiz的matlab程序,下載地址爲
https://ww2.mathworks.cn/matlabcentral/fileexchange/52856-binary-and-real-coded-genetic-algorithms?requestedDomain=zh

4 結果

首先實驗已知解的情況。當目標圖形爲一個圓環時,對應的連線解爲相鄰連線的包絡圖形。
在這裏插入圖片描述
可以看到雖然輸出圖像在有限步的優化迭代中並沒有達到最佳的解,但也相差不大,證明整體的思路方法時沒有問題的。

之後嘗試用真實的圖片進行嘗試。
在這裏插入圖片描述
模型用了100個固定釘子點,畫布爲200×200像素的畫布。最終結果並不是很好。灰度圖上基本相似,但是距原圖的差距還很遠(隔遠了縮小看還是能大概看出來的)。

對比論文中的效果圖,論文中用了超過200多個點,上千的像素畫布進行計算,所以效果要好得多。下圖爲論文效果圖的細節。
在這裏插入圖片描述
所以爲了更好的還原圖像,需要更高的像素的畫布和更多的點。然而更大的畫布與更多的點意味着更大的計算量,本文由於電腦計算量有限,所以難以展現更精緻的圖案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章