2009-10-14 3 views
2

J'ai besoin de dessiner un triangle dans une image que j'ai chargée. Le triangle doit ressembler à ceci:Comment puis-je dessiner un triangle dans une image dans MATLAB?

1 0 0 0 0 0 
1 1 0 0 0 0 
1 1 1 0 0 0 
1 1 1 1 0 0 
1 1 1 1 1 0 
1 1 1 1 1 1 

Mais le principal problème est que je je ne sais pas comment je peux créer une matrice comme ça. Je veux multiplier cette matrice avec une image, et la matrice d'image est composée de 3 paramètres (W, H, RGB).

Répondre

9

Vous pouvez créer une matrice comme celle de votre question en utilisant les TRIL et ONES fonctions:

>> A = tril(ones(6)) 

A = 

    1  0  0  0  0  0 
    1  1  0  0  0  0 
    1  1  1  0  0  0 
    1  1  1  1  0  0 
    1  1  1  1  1  0 
    1  1  1  1  1  1 

EDIT: Sur la base de votre commentaire ci-dessous, il semble que vous avez un 3-D RGB matrice d'image B et que vous souhaitez multiplier chaque plan de couleur de B par la matrice A. Cela aura pour résultat net de définir la partie triangulaire supérieure de l'image (correspondant à tous les zéros dans A) au noir. En supposant que B est une matrice 6-en-6-en-3 (à savoir les lignes et les colonnes du B correspondent à ceux de A), voici une solution qui utilise l'indexation (et la fonction REPMAT) au lieu de multiplication:

>> B = randi([0 255],[6 6 3],'uint8'); % A random uint8 matrix as an example 
>> B(repmat(~A,[1 1 3])) = 0;   % Set upper triangular part to 0 
>> B(:,:,1)        % Take a peek at the first plane 

ans = 

    8 0 0 0 0 0 
    143 251 0 0 0 0 
    225 40 123 0 0 0 
    171 219 30 74 0 0 
    48 165 150 157 149 0 
    94 96 57 67 27 5 

L'appel à REPMAT réplique une version niée de A 3 fois de sorte qu'elle ait les mêmes dimensions que B. Le résultat est utilisé comme logical index dans B, définissant les index non-zéro à 0. En utilisant l'indexation au lieu de la multiplication, vous pouvez éviter d'avoir à vous soucier de la conversion A et B au même type de données (qui serait nécessaire pour faire le multiplication dans ce cas puisque A est de type double et B est de type uint8).

+1

La fonction de matrice triangulaire inférieure surclasse les solutions homerollées. –

+0

Oui, c'est vrai. +1 –

+0

Merci c'était bon. mon problème ici est que je veux multiplier cette matrice avec la matrice contiennent image ::> et la matrice contiennent l'image composée de 3 paramètre (W, H, RGB) plz l'essayer et voir le problème, alors aidez-moi .. merci –

Questions connexes