我正在尝试在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工具的了解有限。
答案 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