Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB中簇的形成_Matlab_Image Processing - Fatal编程技术网

MATLAB中簇的形成

MATLAB中簇的形成,matlab,image-processing,Matlab,Image Processing,我正在研制一种双向切换滤波器。。在这种情况下,它们形成了像素簇来检测图像中的边缘。他们使用了排序象限中值向量 代码: %簇的形成 if((((m1 < avg) && (m4 < avg))&&((m2 >= avg) && (m3 >= avg))) || (((m2 < avg) && (m3 < avg))&&((m1 >= avg) && (m4 &

我正在研制一种双向切换滤波器。。在这种情况下,它们形成了像素簇来检测图像中的边缘。他们使用了排序象限中值向量

代码:

%簇的形成

 if((((m1 < avg) && (m4 < avg))&&((m2 >= avg) && (m3 >= avg))) || (((m2 < avg) && (m3 < avg))&&((m1 >= avg) && (m4 >= avg))))
     p=i+2;
     q=j+2;
     vec=[L(p-2,q) L(p-1,q) L(p+1,q) L(p+2,q)]; % Vertical edge
     dav=double(sum(vec)/4);
     %disp('vertical edge');

 elseif((((m3 < avg) && (m4 < avg))&&((m1 >= avg) && (m2 >= avg))) || (((m1 < avg) && (m2 < avg))&&((m3 >= avg) && (m4 >= avg))))
     p=i+2;
     q=j+2;
     vec=[L(p,q-2) L(p,q-1) L(p,q+1) L(p,q+2)]; % Horizontal edge
     dav=double(sum(vec)/4);
     %disp('horizontal edge');

 elseif((((m1 < avg) && (m3 < avg))&&((m2 >= avg) && (m4 >= avg))) || (((m2 < avg) && (m4 < avg))&&((m1 >= avg) && (m3 >= avg))))
     p=i+2;
     q=j+2;
     vec=[L(p-1,q+1) L(p-1,q-1) L(p+1,q-1) L(p+1,q+1)]; % Diagonal line
     dav=double(sum(vec)/4);
     %disp('diagonal line');

 end
if(((m1=avg)和((m3>=avg))和((m2=avg)和((m4>=avg)))
p=i+2;
q=j+2;
向量=[L(p-2,q)L(p-1,q)L(p+1,q)L(p+2,q)];%垂直边缘
dav=双倍(总和(vec)/4);
%disp(“垂直边缘”);
其他(((m3=avg)和((m2>=avg))和((m1=avg)和((m4>=avg)))
p=i+2;
q=j+2;
向量=[L(p,q-2)L(p,q-1)L(p,q+1)L(p,q+2)];%水平边
dav=双倍(总和(vec)/4);
%disp(“水平边缘”);
其他(((m1=avg)和((m4>=avg))和((m2=avg)和((m3>=avg)))
p=i+2;
q=j+2;
向量=[L(p-1,q+1)L(p-1,q-1)L(p+1,q-1)L(p+1,q+1)];%对角线
dav=双倍(总和(vec)/4);
%disp(“对角线”);
结束
m1、m2、m3和m4为中间值。。这样做对吗


请解释这些,并向我推荐一本与MATLAB图像处理相关的书籍/指南

我假设m1、m2、m3、m4取自您之前的一个问题,意思是 它们是5x5窗口的3x3子窗口的中间

也就是说,它们形成如下矩阵:

m1 m2
m4 m3
或者在一些类似的配置中

也就是说,第一个“if”分支表示:如果m1和m4中间值都小于平均值,并且m2和m3都大于平均值(或者发生完全相反的情况),则在特定的5x5子窗口中应从左到右发生急剧变化。(请记住,中值过滤掉任何单个峰值,这意味着即使图像有噪声,也不会检测到太多假边缘。)至于vec

vec=[L(p-2,q) L(p-1,q) L(p+1,q) L(p+2,q)]; % Vertical edge
只存储搜索窗口的垂直中点。我认为它在这种形式下不起作用,我认为存储边缘索引在这里更有意义:

vec=[[i:i+4]', repmat(j+2, 5, 1)]; 

这将是五个边缘点的坐标,其中假设边缘在当前搜索窗口的中间从上到下。(您也可以手动检查。)

“elseif”的工作原理与此类似

关于图像处理的起点,我可以向您推荐一本加里·布拉德斯基(Gary Bradski)和阿德里安·凯勒(Adrian Kaehler)写的名为“学习OpenCV”的书,尽管这不是一本Matlab的书。如果你不阅读书中的C++程序和OpenCV的详细描述,你仍然可以得到相当好的关于图像处理的一般知识,或者至少你会熟悉主要概念。p>
至于Matlab的细节,我建议您通读图像处理工具箱的全部帮助。听起来,我认为学习图像处理只有一条艰难的道路。

@Barnabas Szabolcs,谢谢Help@BarnabasSzabolcs,请帮忙再次非常感谢。。谢谢你的好意