如何使用交互式网格在matlab上屏蔽图像?

时间:2017-02-02 13:33:02

标签: matlab image-processing

我正在尝试在matlab上处理图像,我需要用10x10交互式网格覆盖图像。交互式网格将使用任何默认颜色修复我单击的框,并存储已点击单元格的位置数据。

到目前为止

我的代码:

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工具的了解有限。

2 个答案:

答案 0 :(得分: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

我将留下将图像分割成一个漂亮的10x10网格的问题作为编程练习。

答案 1 :(得分: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