matlab `Im2col` और` col2im` के कुशल कार्यान्वयन



image-processing vectorization (2)

जीएनयू ओक्टेव छवि पैकेज को देखकर आप धोखा दे सकते हैं। स्क्रिप्ट भाषा के रूप में im2col और col2im लागू होते हैं:

जहाँ तक मैं देखता हूं, यह अलग-अलग टिप्पणी शैली (% के बजाय #) और अलग-अलग स्ट्रिंग शैली ("के बजाय ') में भिन्न है। यदि आप इसे बदलते हैं और नीचे दिए गए परीक्षण को निकाल देते हैं, तो यह पहले से ही चालू हो सकता है। नहीं, डिबगर के साथ इसे लेकर जाएं

इसके अलावा, लाइसेंस के बारे में पता करें (जीपीएलवी 3) यह मुफ़्त है, लेकिन आपके परिवर्तनों को भी मुक्त होना होगा!

MATLAB के im2col और col2im छवियों से संबंधित MATLAB में वेक्टरिंग के लिए बहुत महत्वपूर्ण कार्य हैं।
फिर भी उन्हें MATLAB की इमेज प्रोसेसिंग टूलबॉक्स की आवश्यकता होती है।

मेरा प्रश्न यह है कि क्या MATLAB के कार्यों (कोई टूलबॉक्स के साथ) को लागू करने के लिए एक कुशल (वेक्टरोजी) तरीका है?
मुझे sliding और distinct मोड दोनों की आवश्यकता है

मुझे किसी भी पैडिंग की ज़रूरत नहीं है

धन्यवाद।


मैं केवल आशा कर सकता हूँ कि मथक वर्क्स के लोग आपको या मुझे या स्टैकवॉयरफ्लो पर मुकदमा नहीं करते हैं, अपने आईपी टूलबॉक्स कार्यों के वेक्टरयुक्त कार्यान्वयन करने की कोशिश करते हुए, क्योंकि उन्होंने उस टूलबॉक्स पर मूल्य डाल दिया है। लेकिन किसी भी मामले में, उन मुद्दों को भूलकर, ये कार्यान्वयन हैं।

'sliding' विकल्प के साथ im2col लिए रिप्लेसमेंट

मैं इसे सदिश करने में सक्षम नहीं था जब तक कि मैं स्टैकवॉयरफ्लो पर किसी अन्य समस्या का हल लिखने के लिए बैठ गया। इसलिए, मैं दृढ़ता से इसे देखने के लिए प्रोत्साहित भी करता हूँ

function out = im2col_sliding(A,blocksize)

nrows = blocksize(1);
ncols = blocksize(2);

%// Get sizes for later usages
[m,n] = size(A);

%// Start indices for each block
start_ind = reshape(bsxfun(@plus,[1:m-nrows+1]',[0:n-ncols]*m),[],1); %//'

%// Row indices
lin_row = permute(bsxfun(@plus,start_ind,[0:nrows-1])',[1 3 2]);  %//'

%// Get linear indices based on row and col indices and get desired output
out = A(reshape(bsxfun(@plus,lin_row,[0:ncols-1]*m),nrows*ncols,[]));

return;

'distinct' विकल्प के साथ im2col लिए प्रतिस्थापन

function out = im2col_distinct(A,blocksize)

nrows = blocksize(1);
ncols = blocksize(2);
nele = nrows*ncols;

row_ext = mod(size(A,1),nrows);
col_ext = mod(size(A,2),ncols);

padrowlen = (row_ext~=0)*(nrows - row_ext);
padcollen = (col_ext~=0)*(ncols - col_ext);

A1 = zeros(size(A,1)+padrowlen,size(A,2)+padcollen);
A1(1:size(A,1),1:size(A,2)) = A;

t1 = reshape(A1,nrows,size(A1,1)/nrows,[]);
t2 = reshape(permute(t1,[1 3 2]),size(t1,1)*size(t1,3),[]);
t3 =  permute(reshape(t2,nele,size(t2,1)/nele,[]),[1 3 2]);
out = reshape(t3,nele,[]);

return;

कुछ त्वरित परीक्षणों से पता चलता है कि इन दोनों कार्यान्वयन विशेष रूप से छोटे आकार के इनपुट इनपुट डेटा के लिए एक sliding करते हैं और सभी डेटासेट्स के लिए distinct - distinct रन-टाइम निष्पादन के संदर्भ में इन-निर्मित MATLAB फ़ंक्शन लागूकरण से बेहतर प्रदर्शन करते हैं।

कैसे इस्तेमाल करे

With in-built MATLAB function - 
B = im2col(A,[nrows ncols],'sliding')

With our custom function - 
B = im2col_sliding(A,[nrows ncols])

%// ------------------------------------

With in-built MATLAB function - 
B = im2col(A,[nrows ncols],'distinct')

With our custom function - 
B = im2col_distinct(A,[nrows ncols])




vectorization