早教吧 育儿知识 作业答案 考试题库 百科 知识分享

matlab图像处理编程1)按行扫描边缘二值图像,若该行像素点灰度值全为0,则检测下一行,否则执行下一步。2)若检测到某像素点灰度值为255,则判断其右边像素点灰度值是否为255。若是

题目详情
matlab 图像处理编程
1)按行扫描边缘二值图像,若该行像素点灰度值全为0,则检测下一行,否则执行下一步。  2)若检测到某像素点灰度值为255,则判断其右边像素点灰度值是否为255。若是,则跳过该行不检测,继续检测下一行;否则,执行下一步。  3)已经检测到左边缘点的坐标,继续该行的检测,扫描右边缘点。如果检测到,则计算两边缘点问的距离并保存,继续检测下一行;否则直接继续检测下一行。
(用matlab编程上面的句子)
▼优质解答
答案和解析
这个是扫描算法吧,试着做了一下,希望有所帮助。clc; clear all; close all;
I = imread('rice.png');
I = im2bw(I, graythresh(I)); % 二值化
I = im2uint8(I);
[r, c] = size(I);
D = [];
for i = 1 : r
% 按行扫描边缘二值图像
ri = I(i, :);
if ~any(ri)
% 若该行像素点灰度值全为0,则检测下一行,否则执行下一步
continue;
end
for j = 1 : c-1
if ri(j) == 255
% 若检测到某像素点灰度值为255
s1 = [j, i];
if ri(j+1) == 255
% 则判断其右边像素点灰度值是否为255。若是,则跳过该行不检测
break;
else
% 否则,执行下一步。
% 已经检测到左边缘点的坐标,继续该行的检测,扫描右边缘点。
% 如果检测到,则计算两边缘点问的距离并保存,继续检测下一行;
% 否则直接继续检测下一行。
j = j + 1;
s2 = [j, i];
d = norm(s1-s2);
D = [D d];
break;
end
end
end
end