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
- MATLAB图像处理与计算机视觉(2):在图像上取点划线
- MATLAB 图像处理与计算机视觉学习(1)图像基本信息获取(I)
- 计算机视觉与图像处理
- 计算机视觉与图像处理的 Matlab/Octave 代码集合
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱(待续)
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱推荐
- Matlab计算机视觉/图像处理工具箱
- 给定字符串,打印出组成字符串的字符的全排列
- win7 64位 汇编环境搭建(二)
- linux学习笔记之常用日志
- __sync_fetch_and_add测试demo
- 项目中遇到的MySql行锁与并发性关系(1)
- MATLAB图像处理与计算机视觉(2):在图像上取点划线
- AMAZING AUCTION(简单模拟)
- mini2440 comtest.c 详解
- android 游记
- UDP聊天室
- php 根据时间挫 算出年龄
- android字符太长自动变成省略号
- gvim文件中的^M处理方法
- 网络问题解决记录