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

如何使用交互式网格在matlab上屏蔽图像?,matlab,image-processing,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,'

我试图在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' );
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

这只是我的第一次尝试,我仍在努力确定解决这个问题的最佳方法,因为我对matlab工具的了解有限

您需要阅读以下方面的文档:

按钮关闭功能:

鼠标单击捕获:

补丁:

RGB颜色规格:

打印图像:

一些示例代码可能是:

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');
您需要单独定义
按钮\u down\u回调
函数

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网格的问题留给您作为编程练习。

我的工作代码:

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

好啊让我们看看你到目前为止有什么。