从图像中提取平均像素值

31日视图(30天)
我想提取图像上的平均像素值。
我想做自动定位brightess点旁边的绿色矩形的坐标点,种植新的坐标和发现其均值像素值

接受的答案

为副总经理
为副总经理 2022年5月20日
编辑:为副总经理 2022年5月20日
这可能是一个开始,但是记住,这将是多么脆弱,如果颜色变化或者斯沃琪变成了旋转。
一个= imread (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/1004350/Picture1.png”);
Ahsv = rgb2hsv(一个);
[H S V] = imsplit (Ahsv);
掩码= S > 0.9 & H > 0.15;%创建面具
掩码= bwareaopen(面具,100);%去除杂点
%使用大型strel桥虚线
%这假设线大致整齐
stlen = 200;
掩码= imopen(~面具,(stlen));
%侵蚀避免包括任何边缘上的绿色部分
掩码= imerode(面具,(10));
%这个假设最大的blob ROI
掩码= bwareafilt(面具,1);
imshow(面具)
%建立Mx3从ROI的像素颜色表
roipix = 0 (nnz(面具),3类(A));
c = 1:3%假定是RGB
thischan = (:,:, c);
roipix (:, c) = thischan(面具);
结束
%的代表颜色
meancolor =意味着(roipix, 1)
meancolor = 1×3
220.5722 176.5078 21.8325
%的可视化nonsquare ROI
% non-ROI填充黑色
rgbpict =一个;
rgbpict (repmat(~面具,[1 1 3]))= 0;
%垫修改后的图像颜色样本
深圳=大小(A);
meanswatch = repmat(排列(meancolor[1 3 2]),[50深圳(2)1]);
meanswatch = uint8 (meanswatch);
outpict = [rgbpict;meanswatch];
imshow (outpict)
注意这只是简单的算术平均值。它可能不是你想要的,考虑它将如何影响光流血和光晕。或者,你也可以尝试使用中值()代替的意思。
看到 这个答案 其他选项。基于这个答案,
%获得ROI的一些不同的图像数据
cc = imstats (ctflop (roipix),“的意思是”,“中值”,“模式”,“modecolor”,“modefuzzy”,“moderange”,“nmost”10);
%使用这些统计数据构建一个斯沃琪对于统计图表
标签= {“的意思是”,“中值”,“模式”,“modecolor”,“modefuzzy”};
深圳= imsize (rgbpict 2);
ntiles =(元素个数(标签);
tilesz =[100(深圳(1)/ ntiles)];
block1 = 0 ([tilesz 3 ntiles],“uint8”);
k = 1: ntiles
thistile = colorpict (tilesz [3], cc (k,:)“uint8”);%的斯沃琪
thislabel = im2uint8 (1-textim(标签{k},“ibm-iso-16x9”));%文本标签图片
thistile = im2uint8 (imstacker ({thislabel thistile},“填充”1));%匹配几何
block1 (:,:,:, k) = mergedown (thistile 1“linearburn”);%融合标签和样本
结束
block1 = imtile (block1 ntiles [1]);%垂直安排贴片
block1 = imresize (block1,深圳(1)tilesz (2)));%确定这是正确的大小
%为moderange创建另一个表的多个输出
ntiles = ((cc, 1) -ntiles大小);
tilesz =[100(深圳(1)/ ntiles)];
block2 = 0 ([tilesz 3 ntiles],“uint8”);
k = 1: ntiles
thistile = colorpict (tilesz [3], cc (k + 4,:)“uint8”);%的斯沃琪
thislabel = im2uint8 (1-textim (num2str (k),“ibm-iso-16x9”));%文本标签图片
thistile = im2uint8 (imstacker ({thislabel thistile},“填充”1));%匹配几何
block2 (:,:,:, k) = mergedown (thistile 1“linearburn”);%融合标签和样本
结束
block2 = imtile (block2 ntiles [1]);%垂直安排贴片
block2 = imresize (block2,深圳(1)tilesz (2)));%确定这是正确的大小
%显示合并后的图像
imshow ([rgbpict block1 block2])
你会做。在这些选项的更多详细信息,请参见相关答案。
25日评论
为副总经理
为副总经理 2022年6月2日
编辑:为副总经理 2022年6月4日
这可能不是太坏。它适用于所有给定的图像到目前为止没有任何考虑的标记点。你可以调整角度公差。我修改其中一个图片来证明它仍然工作即使有相当多的扭曲。
%的输入图像
一个= imread (“10 a_22_skew.jpg”);
%得到所有光峰的面具
peakmask =意味着(A, 3) > 210;%铸铁强度
peakmask = imclearborder (peakmask);
peakmask = bwareaopen (peakmask, 100);
imshow (peakmask);持有
%得到质心
S = regionprops (peakmask“重心”);
Cpeaks = vertcat (S.Centroid);
Cimg = fliplr(大小(peakmask)) / 2;
%找到峰值接近图像的中心
D =√总和(Cpeaks-Cimg)。^ 2, 2));
[~,idx] = min (D);
Ccenter = Cpeaks (idx:);
%马克中心峰值
情节(Ccenter (1) Ccenter (2),的r *,“线宽”,2)
%找到最接近这个峰值8山峰
D =√总和(Cpeaks-Ccenter)。^ 2, 2));
[~,idx] =貂(D, 9);
Cnh = Cpeaks (idx(2:结束):);%忽略self-distance
%找到面向约45分
thtol = 16;%容许角度偏离45
thc = atan2d (Cnh (:, 2) -Cimg (1、2), Cnh (: 1) -Cimg (1,1));
th =国防部(thc, 90);
idxc = th > (45-thtol) & th < (45 + thtol);%找到角度大约45的倍数
Ccorners = Cnh (idxc:);%这里只能4行
thc = thc (idxc);
沿着这些斜轨迹%向外走
sqsize = 9;%的广场是9 x9点
萤石= 1:地板(sqsize / 2) 1
k = 1:4%如果Ccorners有4行
%找到最接近这个峰值8山峰
:thiscorner = Ccorners (k);
D =√总和(Cpeaks-thiscorner)。^ 2, 2));
[~,idx] =貂(D, 9);
Cnh = Cpeaks (idx(2:结束):);%忽略self-distance
%找到点面向约在同一个方向
%的前面向观点是关于图像的中心
th = atan2d (Cnh (:, 2) -thiscorner (1、2), Cnh (: 1) -thiscorner (1,1));
[~,idx] = min (abs (th-thc (k)));
Ccorners (k) =人民币(idx:);%这里只能一行
thc (k) = th (idx);
结束
结束
%显示估计的角落在哪里
情节(Ccorners (: 1) Ccorners (:, 2),“莫”,“线宽”2,“markersize”,20)
%按角排序
[~,idx] =排序(thc,“提升”);
Ccorners = Ccorners (idx:);
%创建多边形ROI对象
投资回报率= images.roi.Polygon (gca);
ROI。位置= Ccorners;
在这一点上,您可以使用createMask()之前得到一个逻辑从ROI掩模,或者其他是必要的。

登录置评。

更多的答案(3)

OLUWAFEMI AKINMOLAYAN
OLUWAFEMI AKINMOLAYAN 2022年6月3日
伟大的工作为副总经理。谢谢你很多。这适用于大多数的图像。我只是需要改变peakmask一些。
然而,很少的图片(图片和结果之一是连接)的网格线有点转向一边。这在某种程度上影响了结果。我试着调整但它给了我错误的代码。我认为人会使用网格线掩盖了ROI。我可能是错的。你最好知道如何调整代码的愿望如果可能的结果。
另外,我有一个问题。以作物的ROI给矩形图像“B”,你知道哪些信息可能会丢失吗?
我希望我不是麻烦你有太多我的问题吗?哈哈
因为某些原因我不能添加评论之前的答案。我要评论下更多的答案。我希望你看到这个。
谢谢你再一次

为副总经理
为副总经理 2022年6月4日
我认为绿色标志不会ROI分隔符了,但是如果他们仍在,你不能使用图像几何估计ROI中心。你仍然必须处理找到标志,但也许你可以无需做屏蔽。
不过,发现该地区中心是可疑的如果有明显的透视失真。我打了一个循环,它至少试着修复本身如果它运行到图像的边缘,但我不怀疑,这仍然可以轻易打破。它适用于所有图像至少到目前为止。它不会太挑剔掩蔽。
%的输入图像
% = imread (“Picture1.png”);
% = imread (“picture4.jpg”);
% = imread (40 a_12.jpg);
% = imread (25 a_13.jpg);
% = imread (10 a_22.jpg);
% = imread (10 a_22_skew.jpg);
一个= imread (“40 a_23.jpg”);
sqsize = 9;%的广场是9 x9点
thtol = 15;%容许角度偏离45
%试图找到dark-ish区域,可能是
V = max ([], 3);
roimask = V < 100;
roimask = bwareaopen (roimask, 100);%去除杂点
%找到最远的点远离任何黑点
D = bwdist (roimask);
[mx, idx] = max (D (:));
[r c] = ind2sub(大小(D), idx);
Cimg = [c r];
%得到所有光峰的面具
peakmask =意味着(A, 3) > 200;%铸铁强度
peakmask = imclearborder (peakmask);
peakmask = bwareaopen (peakmask, 100);
imshow (peakmask);持有
%得到质心
S = regionprops (peakmask“重心”);
Cpeaks = vertcat (S.Centroid);
%每个对象距离其他对象
D =√(Cpeaks (: 1) -Cpeaks (: 1)。”)。^ 2 + (Cpeaks (:, 2) -Cpeaks (:, 2)。”)。^ 2);
D (D < 1 e-6) =南;%去除self-distances
Dmean =意味着(min (D, [], 2));%的平均网格间距
%试图找到角落
%如果我们遇到的图像边缘,调整中心和再试一次
%在继续之前/调整最多两次失败
Ccorrection = 0;
尝试= 1:3
[Ccorners thc Ccorrection] = findcorners (Cpeaks、Cimg sqsize, thtol);
如果Ccorrection = = 0;打破;结束
如果尝试= = 1
%每个对象距离其他对象
D =√(Cpeaks (: 1) -Cpeaks (: 1)。”)。^ 2 + (Cpeaks (:, 2) -Cpeaks (:, 2)。”)。^ 2);
D (D < 1 e-6) =南;%去除self-distances
Dmean =意味着(min (D, [], 2));%的平均网格间距
结束
%调整估计图像的中心
Cimg (2) = Cimg (2) - Ccorrection * Dmean;
结束
%显示估计的角落在哪里
情节(Ccorners (: 1) Ccorners (:, 2),“莫”,“线宽”2,“markersize”,20)
%显示原始图像ROI
imshow(一个);持有
%按角排序
[~,idx] =排序(thc,“提升”);
Ccorners = Ccorners (idx:);
%创建多边形ROI对象
投资回报率= images.roi.Polygon (gca);
ROI。位置= Ccorners;
函数[Ccorners thc Ccorrection] = findcorners (Cpeaks、Cimg sqsize, thtol)
%找到峰值接近图像的中心
D =√总和(Cpeaks-Cimg)。^ 2, 2));
[~,idx] = min (D);
Ccenter = Cpeaks (idx:);
%马克中心峰值
情节(Ccenter (1) Ccenter (2),“c *”)
%找到最接近这个峰值8山峰
D =√总和(Cpeaks-Ccenter)。^ 2, 2));
[~,idx] =貂(D, 9);
Cnh = Cpeaks (idx(2:结束):);%忽略self-distance
%找到面向约45分
thc = atan2d (Cnh (:, 2) -Cimg (1、2), Cnh (: 1) -Cimg (1,1));
th =国防部(thc, 90);
idxc = th > (45-thtol) & th < (45 + thtol);%找到角度大约45的倍数
Ccorners = Cnh (idxc:);%这里只能4行
thc = thc (idxc);
沿着这些斜轨迹%向外走
萤石= 1:地板(sqsize / 2) 1
k = 1:4%如果Ccorners有4行
%找到最接近这个峰值8山峰
:thiscorner = Ccorners (k);
D =√总和(Cpeaks-thiscorner)。^ 2, 2));
[~,idx] =貂(D, 9);
Cnh = Cpeaks (idx(2:结束):);%忽略self-distance
%找到点面向约在同一个方向
%的前面向观点是关于图像的中心
th = atan2d (Cnh (:, 2) -thiscorner (1、2), Cnh (: 1) -thiscorner (1,1));
[月后idx] = min (abs (th-thc (k)));
%如果没有在这个方向上相邻点,
%,可能是因为我们刚跑进了图像边缘
如果月后> thtol
如果thc (k) < 0
%如果向下走,尝试改变初始中心向上
Ccorrection = 1;
其他的
%如果向上行走,尝试改变初始中心向下
Ccorrection = 1;
结束
返回;
其他的
Ccorrection = 0;
结束
%更新输出
Ccorners (k) =人民币(idx:);%这里只能一行
thc (k) = th (idx);
结束
结束
结束
如果你种植出B(和将其转换等),你显然失去信息以外的ROI。你也失去准确的ROI内的原始值,因为它是被窜改。无论是插值对你的分析很有意义,我不知道。
3评论

登录置评。


为副总经理
为副总经理 2022年6月4日
这似乎为我工作。创建的图ROI对象需要现在和只需要包含一个图像。
%的输入图像
% = imread (“Picture1.png”);
% = imread (“picture4.jpg”);
% = imread (40 a_12.jpg);
% = imread (25 a_13.jpg);
% = imread (10 a_22.jpg);
% = imread (10 a_22_skew.jpg);
一个= imread (“40 a_23.jpg”);
sqsize = 9;%的广场是9 x9点
thtol = 15;%容许角度偏离45
%试图找到dark-ish区域,可能是
V = max ([], 3);
roimask = V < 100;
roimask = bwareaopen (roimask, 100);%去除杂点
%找到最远的点远离任何黑点
D = bwdist (roimask);
[mx, idx] = max (D (:));
[r c] = ind2sub(大小(D), idx);
Cimg = [c r];
%得到所有光峰的面具
peakmask =意味着(A, 3) > 200;%铸铁强度
peakmask = imclearborder (peakmask);
peakmask = bwareaopen (peakmask, 100);
imshow (peakmask);持有
%得到质心
S = regionprops (peakmask“重心”);
Cpeaks = vertcat (S.Centroid);
%每个对象距离其他对象
D =√(Cpeaks (: 1) -Cpeaks (: 1)。”)。^ 2 + (Cpeaks (:, 2) -Cpeaks (:, 2)。”)。^ 2);
D (D < 1 e-6) =南;%去除self-distances
Dmean =意味着(min (D, [], 2));%的平均网格间距
%试图找到角落
%如果我们遇到的图像边缘,调整中心和再试一次
%在继续之前/调整最多两次失败
Ccorrection = 0;
尝试= 1:3
[Ccorners thc Ccorrection] = findcorners (Cpeaks、Cimg sqsize, thtol);
如果Ccorrection = = 0;打破;结束
如果尝试= = 1
%每个对象距离其他对象
D =√(Cpeaks (: 1) -Cpeaks (: 1)。”)。^ 2 + (Cpeaks (:, 2) -Cpeaks (:, 2)。”)。^ 2);
D (D < 1 e-6) =南;%去除self-distances
Dmean =意味着(min (D, [], 2));%的平均网格间距
结束
%调整估计图像的中心
Cimg (2) = Cimg (2) - Ccorrection * Dmean;
结束
%显示估计的角落在哪里
情节(Ccorners (: 1) Ccorners (:, 2),“莫”,“线宽”2,“markersize”,20)
%显示原始图像ROI
imshow(一个);持有
%按角排序
[~,idx] =排序(thc,“提升”);
Ccorners = Ccorners (idx:);
%创建多边形ROI对象
投资回报率= images.roi.Polygon (gca);
ROI。位置= Ccorners;
%从ROI对象创建面具
掩码= createMask (ROI);
%显示面具
imshow(面具)
函数[Ccorners thc Ccorrection] = findcorners (Cpeaks、Cimg sqsize, thtol)
%找到峰值接近图像的中心
D =√总和(Cpeaks-Cimg)。^ 2, 2));
[~,idx] = min (D);
Ccenter = Cpeaks (idx:);
%马克中心峰值
情节(Ccenter (1) Ccenter (2),“c *”)
%找到最接近这个峰值8山峰
D =√总和(Cpeaks-Ccenter)。^ 2, 2));
[~,idx] =貂(D, 9);
Cnh = Cpeaks (idx(2:结束):);%忽略self-distance
%找到面向约45分
thc = atan2d (Cnh (:, 2) -Cimg (1、2), Cnh (: 1) -Cimg (1,1));
th =国防部(thc, 90);
idxc = th > (45-thtol) & th < (45 + thtol);%找到角度大约45的倍数
Ccorners = Cnh (idxc:);%这里只能4行
thc = thc (idxc);
沿着这些斜轨迹%向外走
萤石= 1:地板(sqsize / 2) 1
k = 1:4%如果Ccorners有4行
%找到最接近这个峰值8山峰
:thiscorner = Ccorners (k);
D =√总和(Cpeaks-thiscorner)。^ 2, 2));
[~,idx] =貂(D, 9);
Cnh = Cpeaks (idx(2:结束):);%忽略self-distance
%找到点面向约在同一个方向
%的前面向观点是关于图像的中心
th = atan2d (Cnh (:, 2) -thiscorner (1、2), Cnh (: 1) -thiscorner (1,1));
[月后idx] = min (abs (th-thc (k)));
%如果没有在这个方向上相邻点,
%,可能是因为我们刚跑进了图像边缘
如果月后> thtol
如果thc (k) < 0
%如果向下走,尝试改变初始中心向上
Ccorrection = 1;
其他的
%如果向上行走,尝试改变初始中心向下
Ccorrection = 1;
结束
返回;
其他的
Ccorrection = 0;
结束
%更新输出
Ccorners (k) =人民币(idx:);%这里只能一行
thc (k) = th (idx);
结束
结束
结束
13个评论
为副总经理
为副总经理 2022年7月1日
我相信任何事情都是可能的,但在这一点上它并不是真的清楚改变任务的需求。脚本的最后化身找到一个ROI的不规则四边形顶点位于图像的特性。以何种方式ROI的大小是固定的(如面积/高度/宽度)?固定大小也修复形状或取向?固定的ROI的哪些部分会对应于图像的特征吗?

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的