Sepertinya inti pekerjaan yang dilakukan dalam model "Simulink" ini sebenarnya dilakukan oleh fungsi MATLAB Anda. Jadi jawaban atas pertanyaan ini sebagian besar akan bergantung pada apa yang sebenarnya dilakukan fungsi tersebut. Secara khusus, apa masukan yang diharapkan ke vidfunc
, dan apa keluaran fungsi ini? Saya menduga fungsi ini mungkin perlu direvisi agar sesuai dengan model Anda.
Untuk men-debug model Anda, ada gunanya memikirkan keluaran sinyal dari setiap blok. Pada setiap langkah waktu, blok From Multimedia File
Anda akan menghasilkan satu bingkai gambar, yang menurut doc tampaknya terstruktur sebagai
Sinyal video berwarna M-by-N-by-P dimana P adalah jumlah bidang warna.
Bergerak ke hilir, selanjutnya kita sampai pada blok Color Space Conversion
, yang dalam hal ini sepertinya kemungkinan besar akan menghasilkan bingkai gambar dalam bentuk matriks M-kali-N (di mana setiap elemen matriks sesuai dengan intensitas gambar pada saat itu. piksel).
Sekarang kita sampai pada bagian yang menarik -- blok MATLAB Fcn
. Seperti yang baru saja kita lihat, masukan ke blok ini akan berupa matriks M-kali-N yang mewakili satu bingkai gambar. Saat Anda melihat kotak dialog parameter untuk blok MATLAB Fcn
, masukan ke blok ini diwakili oleh variabel u
. Oleh karena itu, untuk menjalankan fungsi vidfunc
pada bingkai gambar yang dimasukkan ke blok ini, Anda cukup memasukkan vidfunc(u)
untuk fungsi MATLAB Anda.
Sekarang, berdasarkan masukan yang masuk ke blok MATLAB Fcn
, dan fakta bahwa Anda memiliki blok Penampil Video yang terhubung ke keluaran, vidfunc
harus disusun sedemikian rupa sehingga beroperasi pada satu bingkai gambar sebagai masukannya dan mengeluarkan bingkai gambar tunggal lainnya. Jika vidfunc
tidak terstruktur dengan cara ini, Anda perlu mengeditnya (atau menerapkan kembali fungsi yang sama menggunakan blok Simulink).
Oleh karena itu, mari kita asumsikan bahwa vidfunc
juga mengembalikan matriks M-kali-N yang mewakili bingkai gambar yang diproses. Anda dapat menyetel parameter Dimensi Keluaran untuk blok MATLAB Fcn
Anda ke -1
untuk menunjukkan bahwa keluaran akan memiliki dimensi yang sama dengan masukan. Selain itu, (seperti yang ditunjukkan dalam doc) Anda perlu memastikan Ciutkan hasil 2-D ke 1-D tidak dicentang atau keluaran gambar Anda akan berbentuk satu vektor panjang dan bukan matriks M-kali-N.
Asalkan vidfunc
disusun dengan benar, ini akan menyelesaikan masalah Anda.
CATATAN: Untuk membuat hidup Anda lebih mudah, saya sangat menyarankan untuk menampilkan tipe dan dimensi data sinyal dalam model Simulink Anda. Hal ini dapat membantu menghindari banyak kebingungan. dokumen ini menjelaskan dengan tepat cara melakukan ini.
--UPDATE--
Setelah melihat kode Anda, ini menegaskan kecurigaan saya bahwa input/output vidfunc
tidak konsisten dengan apa yang diharapkan model Simulink Anda. Cara Anda melanjutkan sangat bergantung pada batasan desain Anda dan apa yang sebenarnya Anda inginkan dari sistem ini. Pada dasarnya, model Simulink dan fungsi MATLAB Anda tidak setuju... mana yang benar? Saya akan memberikan beberapa pemikiran umum berdasarkan tebakan terbaik saya tentang tujuan Anda.
Pertama, Simulink meneruskan gambar (dalam bentuk matriks M-kali-N) ke vidfunc
. Artinya vidfunc
tidak perlu lagi memuat gambar di awal kode. Jadi saya yakin Anda dapat memperbarui beberapa baris kode pertama menjadi seperti ini:
function h=vidfunc(a)
BW = edge(a,'sobel'); %sobel edge detection
Lihat bahwa sekarang vidfunc
mengambil gambar sebenarnya (bukan nama file yang berisi gambar tersebut) sebagai masukannya. Pada dasarnya, Anda menghapus baris a=imread(u);
dan langsung memproses a
.
Masalah lainnya adalah keluaran vidfunc
. Simulink mengharapkan keluaran berupa gambar, namun ternyata tidak. Saya tidak 100% yakin apa yang h
seharusnya ada dalam kode ini (ketika saya pertama kali melihat kode Anda, saya pikir ini adalah pegangan untuk objek garis tetapi sepertinya tidak demikian). Tampaknya ini adalah koordinat y dari titik akhir salah satu garis besar. Namun demikian, bukan itu yang diharapkan oleh model Simulink Anda. Yang ini tidak mudah untuk diperbaiki. Mungkin Anda bisa mencoba menggunakan getframe untuk mengambil gambar dari plot garismu.
Saya sebenarnya merasa bahwa saran terbaik yang bisa saya berikan kepada Anda adalah membuang fungsi MATLAB dan mengimplementasikan semuanya di Simulink. Saya pikir ini akan jauh lebih mudah daripada mencoba membuat vidfunc
berfungsi baik dengan model Anda. vidfunc
sebenarnya tidak berisi kode sebanyak itu, jadi ini bukanlah tugas yang terlalu sulit bagi Anda. Manfaat lainnya adalah di akhir proses ini Anda akan memiliki model Simulink bagus yang secara eksplisit menunjukkan semua langkah pemrosesan gambar yang Anda ambil.
Saya percaya bahwa semua pemrosesan gambar yang Anda lakukan dengan fungsi MATLAB juga dapat dilakukan dengan blok Simulink (lihat bagian Blok Simulink di doc).
Semoga beruntung.
person
grungetta
schedule
29.09.2012