matlab数字图像处理
*********************************************** *************************
>文件名:“数字图像处理”实验10区域增长图像分割算法实验报告
>作者:罗天汉
>学生编号:16121141
>邮件:
*********************************************** *************************
参考文章
该算法的优缺点

区域增长是串行区域分割的图像分割方法。它的优点是基本思想相对简单。它通常可以分割具有相同特征的互连区域,并提供良好的边界信息和分割结果。如果没有可用的先验知识,则可以获得最佳性能,并且可以将其用于分割更复杂的图像,例如自然风光。然而,区域生长方法是迭代方法,并且空间和时间成本相对较大。噪声和灰度不均匀可能会导致孔洞和过度分割,并且在处理图像的阴影效果时通常效果不是很好。
算法描述
区域增长的基本思想是将具有相似属性的像素分组以形成区域。具体来说,首先为每个需要分割的区域找到一个像素,作为增长的起点,然后在像素周围的邻域中选择与像素具有相同或相似属性的像素(根据特定像素确定)预定的增长或相似度标准)合并到像素所在的区域。将这些新像素用作新的像素,以继续上述过程,直到不再包含满足条件的像素为止,从而增大了面积。
区域增长是指从某个像素开始,然后根据某些标准逐渐添加相邻像素。当满足某些条件时,区域增长将终止。该区域的增长取决于1.的初始点(点)的选择。2.生长标准。3.终止条件。区域增长从一个或几个像素开始,最终获得整个区域,然后实现目标的提取。

仅需遵循以下三个规则,即可找到需要分割的图像:1、在图像中选择一个点作为点(选择点需要对特定条件进行特定分析)。2、在点执行8邻域扩展或4邻域扩展。准则是:如果所考虑像素和像素的灰度值之间的差的绝对值小于某个阈值T,则该像素被包括在像素中。区。3、当没有更多像素符合加入该区域的条件时,该区域就会停止增长。
算法实现
下面是代码的想法
function [ output_args ] = area_growing_alg( input_args, thredshold_input)%UNTITLED3 此处显示有关此函数的摘要% input_args raw image as gray format% thredshold_input input thredshold% output_args convert image as gray formatI=rgb2gray(input_args);figure,imshow(I),title('原始图像');I=double(I);% show raw png to get y,x[height,width]=size(I);[y_double,x_double]=getpts; %获得区域生长起始点x=round(x_double); %横坐标取整y=round(y_double); %纵坐标取整seed=I(x,y); %将生长起始点灰度值存入seed中% show raw png to get y,xTmp = zeros([height,width]);Tmp(x,y) = 1;sum = seed;seed_save=1;seed_count = 1;thredshold = thredshold_input;close all;while seed_count>0current_seed_gray_level = 0;seed_count = 0;for i=1:heightfor j=1:widthif Tmp(i,j) == 1if (i-1)>0 && (i+1)<(height+1) ...&& (j-1)>0 && (j+1)<(width+1)%判断该点不在边缘for m=-1:1for n=-1:1if Tmp(i+m,j+n)==0 && ...%首先该点周围的点应该没有被纳入生成的内容中abs(I(i+m,j+n)-seed) <= thredshold ... %其次,该点的灰度值需要小于我们设置的阈值Tmp(i+m,j+n) = 1; % 成功判定,将内容输出到输出矩阵中seed_count= seed_count+1;%数量加一current_seed_gray_level = current_seed_gray_level + I(i+m,j+n); %累加灰度,最后求均值endendendendendendendendseed_save = seed_save + seed_count;%获取所有的个数sum = sum +current_seed_gray_level;seed = sum/seed_save;%并计算灰度output_args = Tmp;end

实验结果
测试代码如下
test_png1 = imread('easy.png');t1 = area_growing_alg(test_png1,100);test_png2 = imread('选区_082.png');t2 = area_growing_alg(test_png2,100);figure;% 开一个新的图像区域subplot(2, 2, 1); imshow(test_png1); title('raw image');subplot(2, 2, 2); imshow(t1); title('sub image');subplot(2, 2, 3); imshow(test_png2); title('raw image');subplot(2, 2, 4); imshow(t2); title('sub image');grid on
结果如下:

可以看出我们的分割算法仍然可行,但是对于绝对闭环图形,例如第二行中的图像,我选择的生长点是外部白色部分。没有这个时间,增长算法将无法促进内部白色区域。向上。因为黑色封锁杀死了白色区域的生长方向。这种现象可以在图片的第四行和第三行中清楚显示(为第3行和第4行选择相同的黑色像素



用于彩色或非二进制图像。相同控制点的选择是相同的,并且阈值的选择特别重要。您可以在同一选择点下看到上一个十字的图片的阈值75与阈值125之间的差异:
但是无论结果如何,它都表明在处理阴影时区域增长效果不佳

本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-347328-1.html
假的
我们私了