2016-05-18 3 views
0

Ich frage mich, ob es eine Möglichkeit gibt, die ursprünglichen Farben für ein Bild in MATLAB zurück zu bekommen? color.bmp ist ein Farbbild und nach Operationen wie Segmentierung und Einstellung von wenigen Pixel auf nur um sie aus meinem Bild zu löschen, würde ich den Rest der Figuren mit ihren ursprünglichen Farben zurück "färben". Ich kenne die ursprünglichen RGB-Werte aus dem Originalbild. Das Originalbild sieht aus wie Bild 2. Dann lasse ich nur die gelben BuchstabenWie erhalten Sie die Originalfarben eines Bildes nach der Segmentierung in MATLAB?

i = imread('zestaw3_12.bmp'); 
o1 = im2double(i); 
% obliczanie kolorów 
r = 224/255; 
g = 220/255; 
b = 51/255; 

t = 0.1; 
sr = o1(:,:,1) < r + t & o1(:,:,1) > r - t; 
sg = o1(:,:,2) < g + t & o1(:,:,2) > g - t; 
sb = o1(:,:,3) < b + t & o1(:,:,3) > b - t; 
segm = sr & sg & sb; 
se2 = [0 1 0 ; 1 1 1 ; 0 1 0]; 
segm2 =imopen(segm,se2); 
segm3 = imclose(segm2,se2); 

Here I berührenden Rahmen Buchstaben löschen und mit regionprops Funktion i Buchstaben löschen Ich will nicht mehr sehen, und das ist das Ergebnis 1. Alles, was ich bekomme, ist im_ok logisch, was auf Bild 1 gezeigt wird. Und zu guter Letzt möchte ich die Buchstaben F, D und E wieder wie im Original auf gelb färben. enter image description here

enter image description here

Antwort

2

Wenn Sie das Originalbild haben, ist es in MATLAB erste Last dann verwenden Maskierung der Pixel einzustellen, die gleich 0 sind mit dem, was die entsprechenden Stellen im Originalbild sind. Unter der Annahme, das Originalbild gespeichert in original.bmp und das segmentierte Bild wird in color.bmp gespeichert sind, einfach dies tun:

im_orig = imread('original.bmp'); 
im = imread('color.bmp'); 
mask = all(im == 0, 3); 
im(mask) = im_orig(mask); 

Die ersten beiden Anweisungen laden die beiden Bilder in den MATLAB-Workspace. Die wichtigste Aussage ist die vorletzte. Es findet eine logische Maske, wo alle Orte in dem segmentierten Bild, wo die Kanäle alle 0 sind für jede rot, grün, blau (d. H.), diese Orte werden auf true gesetzt, während der Rest auf false gesetzt wird. Die Funktion all hilft uns hier, wo wir sicherstellen, dass alle Kanalwerte für jede räumliche Position im Bild gleich 0 sind.

Dann verwenden wir diese Maske, um direkt in das segmentierte Bild zu indizieren und die Farbpixel vom Originalbild aus den Positionen zu kopieren, die im segmentierten Bild auf Schwarz gesetzt wurden.

+0

Vielen Dank für eine Antwort, aber vielleicht mache ich etwas falsch, aber es funktioniert nicht für mich .. In original.bmp gibt es Buchstaben mit verschiedenen Farben. Alles, was ich tun muss, ist, alles Nicht-Gelb von diesem Bild zu löschen, und ich benutze Segmentierung hier. Dann muss ich einige von ihnen entfernen und ** regionprops ** Funktion verwenden, um es zu tun. Nach dieser Operation empfange ich ** im_all ** als eine logische und ich möchte es wieder in gelb einfärben. Ich wollte aber noch eine ** sth.bmp ** Datei machen, sie mit dieser Farbe füllen, die ich bekommen möchte und dann einfach meine ** im_all ** nach der Konvertierung verdoppeln, aber es hört sich ziemlich lahm an ... – Maq92

+0

Bitte zeig es mir (1) Der Code, den Sie geschrieben haben. (2) Die Bilder selbst. Es war sehr schwierig zu bestimmen, was Sie tatsächlich von Ihrem Posten aus getan haben. Nun, was ich verstehe, was Sie wirklich wollen, ist eigentlich nicht das, was Sie in Ihrer ursprünglichen Frage fragen. Bitte bearbeiten Sie Ihre Frage entsprechend. – rayryeng

+0

OK, das ist ** komplett ** anders als das, was Sie gefragt haben. Sie möchten grundsätzlich die Originalfarben eines Bildes mit einer Maske finden. Ich markiere als Duplikat. – rayryeng

Verwandte Themen