How to create image matrix via

조회 수: 21 (최근 30일)
Vincenzo
Vincenzo 2011년 8월 18일
I have the following problem: I have a file.mat, containing a matrix 240X320. If I click on imagesc, I see an image referencing the matrix ... Now, I want to select a portion of the image by clicking on "insert-> rectangle" and from there derive the submatrix. If I click with right mouse button I can show M-code, which gives me only the coordinates of the rectangle, but how can I obtain the submatrix?

채택된 답변

Image Analyst
Image Analyst 2011년 8월 18일
No, that's not right. You need to convert your x,y from normalized values to values that correspond to pixel coordinates. Get the size of your image like this
[rows columns numberOfColorChannels] = size(yourImageArray);
Then multiply your x's by the columns, and the y's by the rows to get x and y in columns and rows instead of normalized units. Then get the submatrix like this
submatrix = yourImageArray(row1:row2, column1:column2);

추가 답변 (7개)

Andrei Bobrov
Andrei Bobrov 2011년 8월 18일
M = randi([-123 421],10) % your matrix
xy = [2,7;4,8] % coordinates of your rectangle in view [x1,x2;y1,y2]
variant
c = arrayfun(@(i1)xy(i1,1):xy(i1,2),1:2,'un',0);
SM = M(c{:}) % your submatrix
or
SM = M(xy(1,1):xy(1,2),xy(2,1):xy(2,2)) % your submatrix

Vincenzo
Vincenzo 2011년 8월 18일
Sorry can you help me step by step because i'm a neophyte...
This is the M-code:
function createrectangle3(figure1)
%CREATERECTANGLE3(FIGURE1)
% FIGURE1: annotation figure
% Auto-generated by MATLAB on 18-Aug-2011 11:55:47
% Create rectangle
annotation(figure1,'rectangle','FaceColor','flat',...
'Position',[0.4206 0.5929 0.1365 0.1429]);
%end of M-code
The name of original matrix is Seq009...Now i have to put what you wrote in m-file or in command window? like this?:
function createrectangle3(figure1)
%CREATERECTANGLE3(FIGURE1)
% FIGURE1: annotation figure
% Auto-generated by MATLAB on 18-Aug-2011 11:55:47
% Create rectangle
annotation(figure1,'rectangle','FaceColor','flat',...
'Position',[0.4206 0.5929 0.1365 0.1429]);
Seq009 = randi([-123 421],10) % your matrix
xy = [0.4206 0.5929 0.1365 0.1429] % coordinates of your rectangle in view [x1,x2;y1,y2]
is it right or not?

Vincenzo
Vincenzo 2011년 8월 18일
@Image Analyst
A submatrix appears but just a 56x2..it's strange isn't it?
Summarize what I did:
In command window->
[rows columns numberOfColorChannels] = size(Seq009);
%Seq009 is the matrix 240x320
% the position of rectangle is [0.4206 0.5929 0.1365 0.1429]
x1=0.4206; x2=0.5929; y1=0.1365; y2=0.1429;
row1= x1*columns; row2= x2*columns; column1=y1*rows; column2=y2*rows;
submatrix=Seq009(row1:row2 , column1:column2);
And after that appears :
"Warning: Integer operands are required for colon operator when used as index"
and if i go imagesc(submatrix) appears a lot of multicolor rows.
What did I do wrong??
  댓글 수: 1
Image Analyst
Image Analyst 2011년 8월 20일
Your row1, etc. are fractional numbers. You need to use round(), floor(), ceil(), or int32() to get them into integers.

댓글을 달려면 로그인하십시오.


Walter Roberson
Walter Roberson 2011년 8월 18일

Vincenzo
Vincenzo 2011년 8월 20일
Other hints???

Vincenzo
Vincenzo 2011년 9월 7일
Hi, first of all thanks for your help...I read your last answer.."http://www.mathworks.com/matlabcentral/answers/13951-how-to-create-image-matrix-via" now if i use rand(), floor(), ceil(), or int32() they approximate the value to 0 or 1 (cause i have value x1=0.386 x2=0.5571 y1=0.1436 y2=0.1143) and when i do a submatrix, an error message appears:"Subscript indices must either be real positive integers or logicals."(if i use int32) or "Index exceeds matrix dimensions"(with ceil) ...what i did:
x1=0.3867;
x2=0.5571;
y1=0.1436;
y2=0.1143;
x3=int32(x1); %appears x3 with value 0
x4=int32(x2); % " x4 " " 1
y3=int32(y1); % " y4 " " 0
y4=int32(y2); % " x4 " " 1
[rows columns numberOfColorChannels] size(Seq009); %appears rows with value 240 and columns with value 320
row1=x3*320;
row2=x4*320;
column1=y3*240;
column2=y4*240;
submatrix=Seq009(row1:row2,column1:column2);
And the error message appears
Now what's the problem :( ??
  댓글 수: 2
Walter Roberson
Walter Roberson 2011년 9월 7일
x1=0.3867;
row1=int32(x1*320);
That is, do not convert the multiplication factor to integer: convert the result of the multiplication to integer.
Vincenzo
Vincenzo 2011년 9월 8일
Thank you Walter...a submatix appears with no error but it's a 61X2 i think it's a little small or not?
I was thinking of getting a 60X70 or something like that...

댓글을 달려면 로그인하십시오.


Vincenzo
Vincenzo 2011년 9월 9일
In your view it's right a submatrix 61x2?

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by