Lines for the region of interest.
조회 수: 2 (최근 30일)
이전 댓글 표시
답변 (1개)
Vinai Datta Thatiparthi
2020년 9월 15일
Hey!
Suppose, the image dimensions are [w h] and the image center is at (p,q) [with general considerations}.
"How do I plot lines in an image according to the angles..."
Using a little bit of trigonometry and MATLAB's column-major notations, the X-coordinate of the third vertex of the shape made by the coordinate axes and the blue line that makes an angle of alpha with the Y-axis would be:
The Y-coordinate would be 1.
im = imread('img.png');
imshow(im);
hold on;
line([x, p], [y, q]); % Draws a line from (p,q) to (x,y)
For the next line i.e. with angle beta, replace "alpha" in the aforementioned equation with "alpha + beta" angles. You'll probably have to write a code to do this process repeatedly if you want a programmatic solution to this problem.
"extract region between these lines for analysis..."
Region created by vertices (p,q), (p,1) & (x,y) [which we just calculated] can be inputs to this. Examples on this Documentation page describe how to do this non-interactively using images.roi.Polygon.
Similarly, for the line that makes an angle beta, you'd have to add an additional vertex - the edge/corner of the image i.e. [w 1].
Hope this helps!
댓글 수: 1
Vinai Datta Thatiparthi
2020년 9월 18일
Hey Thulyo,
Have a look at this code:
close all
%% Setup
im = rgb2gray(imread('peppers.png'));
[heightIm, widthIm] = size(im); %
% Center of the image (p,q)
p = widthIm/2;
q = heightIm/2;
%% Red lines
% Horizontal Red Line
rHorzX1 = 1;
rHorzY1 = q;
rHorzX2 = widthIm;
rHorzY2 = q;
% Vertical Red Line
rVertX1 = p;
rVertY1 = 1;
rVertX2 = p;
rVertY2 = heightIm;
%% Blue Lines
alpha = 15; % In degrees
bX2 = p + q*tan(alpha*pi/180);
bY2 = 1;
beta = 30;
bX3 = p + q*tan((alpha+beta)*pi/180);
bY3 = 1;
%% Display everything
imshow(im);
hold on;
line([rHorzX1,rHorzX2],[rHorzY1,rHorzY2],'Color','r')
line([rVertX1,rVertX2],[rVertY1,rVertY2],'Color','r')
line([p,bX2],[q,bY2],'Color','b')
line([p,bX3],[q,bY3],'Color','b')
%% Extract Region
% Region of Interest
h = images.roi.Polygon(gca,'Position',[p, q; rVertX1, rVertY1; bX2, bY2]);
% Create mask for ROI
maskRegion = createMask(h);
% Create new image
dispImg = im;
% Logical Indexing
dispImg(maskRegion == 0) = 0;
figure
% Display only the ROI image
imshow(dispImg)
Hope this helps!
참고 항목
카테고리
Help Center 및 File Exchange에서 Image Filtering and Enhancement에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!