2017-02-02 170 views
0

我想在matlab上處理圖像,並且需要用10x10交互式網格覆蓋圖像。交互式網格將修復我點擊的盒子上的任何默認顏色和存儲點擊單元格的位置數據。如何使用交互式網格遮罩matlab上的圖像?

到目前爲止我的代碼:

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'); 

這只是我的第一次嘗試,我仍在試圖確定解決這個問題,因爲我的MATLAB的工具可用的知識是有限的最好方式。

+1

確定。向我們展示你到目前爲止所擁有的。 – toshiomagic

回答

0

你需要閱讀的文件在以下方面:

按鈕按下功能:https://www.mathworks.com/help/matlab/creating_plots/button-down-callback-function.html

鼠標單擊捕獲:https://www.mathworks.com/help/matlab/creating_plots/capturing-mouse-clicks.html

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

RGB顏色規格:https://www.mathworks.com/help/matlab/ref/colorspec.html

繪圖圖片:https://www.mathworks.com/help/images/ref/imshow.html

一些示例代碼可能是:

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'); 

你需要單獨定義button_down_callback功能。

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 

我將離開將圖像起來,以一個漂亮的10×10格你在編程練習的問題。

0

我的工作代碼:

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