%本腳本的作用是:在圖像中隨機取兩點,統計兩點之間的像素,
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;
end
end
hold 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))';
end
if 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;
end
end
%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;
end
elseif (coordX(2) - coordX(1)) == 0
for idxy = eval(intfunY1) : stepy : eval(intfunY2)
idxx = ceil(coordX(2));
linepts(idx) = img(idxx, idxy);
idx = idx + 1;
end
else
for idxx = eval(intfunX1) : stepx : eval(intfunX2)
idxy = ceil(coordY(2));
linepts(idx) = img(idxx, idxy);
idx = idx + 1;
end
end
figure(2), plot(linepts);
%這個腳本的作用:
% 通過鼠標取圖像中的兩點,連線
% 繪製連線的像素灰度值