2017-02-02 4 views
0

Ich versuche, ein Bild auf Matlab zu verarbeiten, und ich muss das Bild mit 10x10 interaktivem Raster überlagern. Das interaktive Raster wird das Feld, auf das ich geklickt habe, mit einer Standardfarbe fixieren und Positionsdaten für angeklickte Zellen speichern.Wie maskieren Sie ein Bild auf Matlab mit interaktiven Raster?

My-Code so weit:

I = imread('LcmsResult_ImageRng_000280.jpg'); 
imshow(I) 
hold on 
M = size(I,1); 
N = size(I,2); 
a=10; 
b=10; 
for k = 1:a:M 
    x = [1 N]; 
    y = [k k]; 
    plot(x,y,'Color','black','LineStyle','-'); 
    set(findobj('Tag','MyGrid'),'Visible','on') 
end 
for k = 1:b:N 
    x = [k k]; 
    y = [1 M]; 
    plot(x,y,'Color','red','LineStyle','-'); 
    set(findobj('Tag','MyGrid'),'Visible','on') 
end 
hold off 
[x,y] = ginput(2); 
hold on; 
fill([x-10 x x x-10],[y y y+10 y+10],'g'); 

Dies ist nur mein erster Versuch ist, ich versuche immer noch den besten Weg, um zu bestimmen, um dieses Problem wie mein Wissen über Matlab-Tools zu lösen verfügbar ist begrenzt.

+1

Ok. Zeig uns was du bisher hast. – toshiomagic

Antwort

0

Sie müssen die Dokumentation zu den folgenden lesen:

Button-Down-Funktionen: https://www.mathworks.com/help/matlab/creating_plots/button-down-callback-function.html

Mausklick Aufnahme: https://www.mathworks.com/help/matlab/creating_plots/capturing-mouse-clicks.html

Patches: https://www.mathworks.com/help/matlab/ref/patch.html

RGB-Farben-Spec: https://www.mathworks.com/help/matlab/ref/colorspec.html

Plotten Bilder: https://www.mathworks.com/help/images/ref/imshow.html

kann Einige Beispiel-Code sein:

figure 
imshow('imagename.jpg'); 
p = patch([0, 10], [0, 10], [1 1 1]); 
set(p, 'FaceAlpha', 0); % make patch transparent 
set(p, 'ButtonDownFcn', @(~,~)button_down_callback(p),'PickableParts','all'); 

Sie werden die button_down_callback Funktion separat definieren müssen.

function button_down_callback(p) 
    display('Clicked'); 
    set(p, 'Color', [0.5, 0.9, 0.2], 'FaceAlpha', 0.5); % Change color and set transparency to half 
end 

Ich werde die Frage der Aufteilung des Bildes bis in zu einem schönen 10x10 Raster Sie als Übung in der Programmierung verlassen.

0

Mein Arbeitscode:

function [ ] = defect_marking() 
    % This function divides a figure into grids. The grid cells can be clicked 
    % ,on detecting the click the cell would turn to red. Use keypress to exit 
    % the funtion 
     disp('Defect Function'); 
     pw = waitforbuttonpress; 
     while pw ~= 1 
         cell = 100; % size of single cell 
         col = 11; % maximum number of columns in the grid 
         [c1, c2] = ginput(1);% detect cursor co-ordinates 
         cell_n = (floor(c2/cell)*col)+ (floor(c1/cell)+1); 
         n = cell_n;% index of cell cell number selected 
         n_row = floor(n/col); 
         n_col = mod(n,col); 

    % Calculations for determining co-ordinates for grid cell to be patched. 
         x1= (n_col * cell)- cell;   
         y1= (n_row * cell)+ cell; 

         x2= (n_col * cell); 
         y2= (n_row * cell)+ cell; 

         x3= (n_col * cell);    
         y3 = (n_row * cell); 

         x4= (n_col * cell)- cell;   
         y4= (n_row * cell); 

         x = [x1 x2 x3 x4]; 
         y = [y1 y2 y3 y4]; 

         p = patch(x,y,'red');% applying patch on grid 
         pw = waitforbuttonpress;% updating button press to detect keypress to exit 
     end 
    end 
Verwandte Themen