MATLAB图像处理与计算机视觉(2):在图像上取点划线

来源:互联网 发布:主机电源检测软件 编辑:程序博客网 时间:2024/05/21 21:58
%本脚本的作用是:在图像中随机取两点,统计两点之间的像素,clc;clear all;img = imread('F:\DataSet\retina Vessal\all\images\01_dr.jpg');img = rgb2gray(img);figure(1), imshow(img);hold on;%取点[coordX, coordY] = ginput(2);%连线line([coordX(1) coordY(1)], [coordX(2) coordY(2)], 'Color', 'c');%线的长度占多少个像素linelength = ceil(sqrt((ceil(coordX(2)) - floor(coordX(1)))^2 + ...            (ceil(coordY(2)) - floor(coordY(1)))^2));%存储线的灰度值linepts = zeros(linelength, 2);idx1 = 1;idx2 = 1;for idxx = floor(coordX(1)):ceil(coordX(2))    for idxy = floor(coordY(1)):ceil(coordY(2))        linepts(idx1, idx2) = img(idxx, idxy);        idx1 = idx1 + 1;        idx2 = idx2 + 1;    endendhold off;

怎么不能正确显示呢?

修改如下:

%本脚本的作用是:在图像中随机取两点,统计两点之间的像素,%并将其灰度值绘制成一个曲线图(类似直方图)clc;clear all;img = imread('F:\DataSet\retina Vessal\all\images\01_dr.jpg');img = rgb2gray(img);figure(1), imshow(img);hold on;%取点[coordX, coordY] = ginput(2);%连线line(coordX, coordY, 'Color', 'c');hold off;%线的长度占多少个像素linelength = ceil(sqrt((ceil(coordX(2)) - floor(coordX(1)))^2 + ...            (ceil(coordY(2)) - floor(coordY(1)))^2));%存储线的灰度值linepts = zeros(linelength,1);idx = 1;%idx2 = 1;if coordX(1)>= coordX(2)     stepx = -1;    intfunX1 = 'ceil(coordX(1))';    intfunX2 = 'floor(coordX(2))';else    stepx = 1;    intfunX1 = 'floor(coordX(1))';    intfunX2 = 'ceil(coordX(2))';endif coordY(1) >= coordY(2)    stepy = -1;    intfunY1 = 'ceil(coordY(1))';    intfunY2 = 'floor(coordY(2))';else    stepy = 1;    intfunY1 = 'floor(coordY(1))';    intfunY2 = 'ceil(coordY(2))';end%{%你知道为什么多出这么多像素吗?因为你将那个三角形区域全部计算在内了!for idxx = eval(intfunX1) : stepx : eval(intfunX2)    for idxy = eval(intfunY1) : stepy : eval(intfunY2)        linepts(idx) = img(idxx, idxy);        idx = idx + 1;            endend%line([1 1], [233%hold off;%}if (coordX(2) - coordX(1)) ~= 0  && (coordY(2) - coordY(1)) ~= 0    slopeS = (coordY(2) - coordY(1))/(coordX(2) - coordX(1));    cutS = coordY(1) - slopeS * coordX(1);    for idxx = eval(intfunX1) : stepx : eval(intfunX2)        idxy = ceil(slopeS * idxx + cutS);        linepts(idx) = img(idxx, idxy);        idx = idx + 1;    endelseif  (coordX(2) - coordX(1)) == 0     for idxy = eval(intfunY1) : stepy : eval(intfunY2)        idxx = ceil(coordX(2));        linepts(idx) = img(idxx, idxy);        idx = idx + 1;    endelse    for idxx = eval(intfunX1) : stepx : eval(intfunX2)        idxy = ceil(coordY(2));        linepts(idx) = img(idxx, idxy);        idx = idx + 1;    endendfigure(2), plot(linepts);%这个脚本的作用:%       通过鼠标取图像中的两点,连线
%绘制连线的像素灰度值


0 0
原创粉丝点击