|
|
Daten vergleich in Matlab |
|
Gokhlayeh |

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 17.06.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.07.2016, 12:22
Titel: Daten vergleich in Matlab
|
 |
|
 |
|
Hi liebe Forum-Mitglieder,
ich habe folgendes "Problem". Ich habe ein Bild, dessen RGB Werte der einzelnen Pixel ich einlesen lasse und eine dazugehörige Colormap mit 401 Indices. Darüber hinaus habe ich im workspace eine 401x4 matrix hinterlegt, in der ich diesen RGB Werten meiner Colormap als vierte Spalte einen Referenzwert zugeordnet habe. (also 1. Spalte R, 2. Spalte G, 3. Spalte B und 4. Spalte Referenzwert) (wobei G immer 0 ist)
Was ich gerne machen würde:
Ich möchte das Matlab die eingelesenen RGB Werte des Bildes mit denen in der 401x4 Matrix vergleicht und bei Übereinstimmung, den Referenzwert in der 4. Spalte als Ergebnis ausgeben lasse. (am besten als Plot, als neue Matrix wäre für den Anfang auch klasse)
Weitere Schwierigkeit: Nicht alle RGB Werte des Bildes sind in der Matrix auch enthalten. Deswegen sollte Matlab am besten nicht nur den genauen RGB Wert des Pixels suchen, sondern eine "definierte Umgebung". Vielleicht einfacher mit einem Beispiel:
Mein Pixel hat die RGB Werte 140, 0, 153
In der Matrix sieht es aber so aus:
130, 0, 160 50
135, 0, 155 75
140, 0, 150 100
145, 0, 145 125
Wäre super, wenn Matlab dann den Referenzwert 100 ausspuckt, weil es erkennt, dass 140, 0, 150 in der Nähe von 140, 0, 153 liegt.
Ich hoffe meine Frage ist deutlich geworden? Für jegliche Hilfe vorab besten Dank! Anbei mein Code, so wie ich ihn bisher habe.
Christian
RGB_ret = xlsread ('colormap', 2, 'A2: D402');
R = RGB_ret(:,1);
G = RGB_ret(:,2);
B = RGB_ret(:,3);
C = [R,G,B];
ret= RGB_ret (:,4);
for i=1 : length(C);
color=C(i,:);
result(i,1)=color(1)/255;
result(i,2)=color(2)/255;
result(i,3)=color(3)/255;
end
map(1:401, :) = result;
colormap(map)
%colormapeditor
colorbar
%%%Einlesen der image-Datei und Kanalaufteilung%%%
img = imread('nametest.png'); % Read image
red = img(:,:,1); % Red channel
green = img(:,:,2); % Green channel
blue = img(:,:,3); % Blue channel
a = zeros(size(img, 1), size(img, 2));
just_red = cat(3, red, a, a);
just_green = cat(3, a, green, a);
just_blue = cat(3, a, a, blue);
back_to_original_img = cat(3, red, green, blue);
% figure, imshow(img), title('Original image')
figure, imshow(just_red), title('Red channel')
% figure, imshow(just_green), title('Green channel')
figure, imshow(just_blue), title('Blue channel')
figure, imshow(back_to_original_img, colormap(map)), title('Back to original image')
% Rmax = max(red)
% Gmax = max (green)
% Bmax = max (blue)
|
|
|
|
|
ro_mat |

Forum-Century
|
 |
Beiträge: 158
|
 |
|
 |
Anmeldedatum: 20.10.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.07.2016, 13:10
Titel:
|
 |
Hallo,
folgender Vorschlag --> du kannst Zeilenweise die Pixelwerte von deiner Matrix abziehen und dann suchen wo die geringste Abweichung ist:
Gruß
|
|
|
Gokhlayeh |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 17.06.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.07.2016, 15:12
Titel:
|
 |
Hey ro_mat,
erst einmal: klasse Befehl, hilft mir schon sehr weiter! Echt Klasse! Vielen Dank!
Aber weißt du, oder jemand anderes noch, wie ich bei B = [RGB Pixel] nicht nur einen händisch eingegebenen Wert vergleichen kann, sondern Matlab da meine Matrix mit den von meinen Bild eingelesenen RGB-Werten "geben kann" und er automatisch diese Operation mit allen dort enthaltenen Werten macht? Und mir für jedes Pixel den passenden Referenzwert ausspuckt?
Idealerweise mit einem Befehl verbunden, der diese Referenzwerte in einer figure plotet! :-D
Ich weiß, viele Wünsche, aber es wäre super, wenn das klappt! Vielen Dank!
Christian
Zuletzt bearbeitet von Gokhlayeh am 14.07.2016, 15:25, insgesamt einmal bearbeitet
|
|
|
ro_mat |

Forum-Century
|
 |
Beiträge: 158
|
 |
|
 |
Anmeldedatum: 20.10.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.07.2016, 15:22
Titel:
|
 |
Hallo,
du bekommst ja durch diese Befehle:
ja deine Pixels in RGB oder nicht? Diese kannst du ja dann auch Schrittweise in der for-Schleife durchlaufen lassen! Oder sehe ich das falsch?
|
|
|
Gokhlayeh |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 17.06.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.07.2016, 16:26
Titel:
|
 |
Hey,
nochmals vielen Dank.
Ja an so etwas in der Art hatte ich gedacht.
Also quasi soll mein 'B' wie es unten im for-Befehl ist auch eine Schleife darstellen, oder? Allerdings besteht mein 'B' aus einer Matrix mit 900x300x3 Werten (also 900 x 300 Pixel die jeweils den RGB pro Pixel enthalten), während mein A-Matrix aus 401x4 Werten besteht. Ich müsste doch jetzt eigentlich meine Pixel in einzelne Spalten sortieren. Z.B. Pixel 1-1 = R1-1G1-1B1-1, Pixel 1-2 = R1-2G1-2B1-2,....Pixel 1-869= R1-869G1-869B1-869, unsw..
Hättest Du da eine Idee wie ich das machen kann?
Bzw. habe ich deinen Kommentar richtig verstanden?
Vielen Dank!
Christian
%%%
A = [deine Matrix];
B = [RGB Pixel];
for i = 1:length(A)
C(i,1:3) = abs(A(i,1:3) - B);
end
Ref = A(find(min(sum(C,2)) == sum(C,2)),4); % Ausgabe der Referenz
|
|
|
ro_mat |

Forum-Century
|
 |
Beiträge: 158
|
 |
|
 |
Anmeldedatum: 20.10.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.07.2016, 12:30
Titel:
|
 |
Hallo,
ja so muss es gehen, du hast ein Bild mit 900 * 300 Pixel was heißt du brauchst eine Matrix B mit 27000x3 - also jedes Pixel RGB
Schau mal ob dir das hilft!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|