在matlab中查找感兴趣对象的总像素数?(Find total pixels in the object of interest in matlab?)
我想找到图像中对象的总像素数。
请考虑以下图像作为示例。 我想找到三角形中的总像素数。
我在用
imtool('test.jpg');
并使用measure distance工具并手动找到距离,从而找到三角形的面积以计算对象的总像素,在这种情况下是三角形。
有没有一种有效的方法呢?
I would like to find the total number of pixels in an object in an image.
Consider the following image as an example. I would like to find the total number of pixels in the triangle.
I am using
imtool('test.jpg');
and using the measure distance tool and finding the distance manually and thus finding the area of the triangle to compute the total pixels for the object, in this case the triangle.
Is there an efficient way of doing it?
原文:https://stackoverflow.com/questions/14840327
2020-01-05 14:01
满意答案
这是一个方法:
img = imread('test.jpg');
thr = graythresh(img);
thr_img = im2bw(img,thr);
triangle_count = sum(sum(thr_img < thr))
选择图像的阈值
基于此阈值对图像进行二值化
计算二值化图像中低于此阈值的像素数
在您的情况下,三角形中的像素数似乎在1605037左右。
这是thr_img的可视化 - 二值化图像:
Here's a method:
img = imread('test.jpg');
thr = graythresh(img);
thr_img = im2bw(img,thr);
triangle_count = sum(sum(thr_img < thr))
Choose a threshold for the image
Binarize the image based on this threshold
Count the number of pixels below this threshold in the binarized image
In your case, the number of pixels in the triangle appears to be around 1605037.
Here's a visualization of thr_img -- the binarized image:
2013-02-12
相关问答
我猜你的问题是因为你的jpg掩码不是真正的二进制图像。 使用jpg存储二进制图像不是一个好主意,因为由于jpegs的压缩性质,你的掩码会略微偏离二进制图像,特别是在边缘。 要从jpeg掩码中获取真实的二进制图像,您可以尝试这样做: Ibw = im2bw(rgb2gray(imread('mask.jpg')));
如果没有帮助,当你生成面具时,不要使用jpeg。 相反,在灰度级中使用未压缩(或无损压缩)tiff,或者仅将其存储为文件中的二进制matlab矩阵。 希望这可以帮助。 I guess...
像这样使用nnz - nnz(all(im==0,3))
im是你的图像数据。 替代方案 - sum(reshape(all(im==0,3),[],1))和sum(sum(all(im==0,3))) 。 这里的假设是黑色像素是三元组(0,0,0) 。 相反,如果您将黑色像素定义为跨所有通道的相同像素位置的区间[0 th]中具有值的像素,请使用 - nnz(all(im<=th,3))
Use nnz like this - nnz(all(im==0,3))
where im is yo...
您可以使用bwboundaries查找白色连接组件的像素边界,这样每个连接的组件都有一组相应的边界。 %calculate boundries and generate boundry mask
B = bwboundaries(im,'noholes');
boundriesImage = zeros(size(im));
boundriesPixels = cell2mat(B);
boundriesImage(sub2ind(size(im),boundriesPixels(:,1),bou...
正如eykanal所说,你可以使用impoly函数在你的图像中创建你想要的任何ROI。 提取coordiantes的一般解决方案是创建所需的ROI,并使用find提取坐标和一些设置操作以删除不需要的点。 喜欢这个: imshow(image)
h = impoly() ; %# draw ROI1
ROI1 = createMask(h); %# create binary mask of ROI1
h2 = impoly(); %#...
您可以使用fillPoly()在蒙版数组上绘制矩形,然后使用蒙版数组选择所需的像素: import cv2
import numpy as np
rect = [[634, 547],[353, 504],[436, -41],[717, 1]]
poly = np.array([rect], dtype=np.int32)
img = np.zeros((800, 800), np.int8)
cv2.fillPoly(img, poly, 255)
imshow(img, cmap="gr...
如果像素的空间位置不相关,您可以这样做: datatoprocess=I(I
阈值是将白色与黑色分开的值。 [ graythresh][1]是一个很棒的功能。 datatoprocess将是一个带有像素值的1xN数组。 相反,如果像素的空间位置相关,则需要修改函数以不对特定像素起作用。 最好的方法是将NaN值设置为您不想考虑的像素。 Itoprocess=I;
Itoprocess(I>threshold)=NaN;
如果没有关于你在图像中做什么的更多信息,这是任何人都...
看看匀称的图书馆。 在处理python中的2D多边形时(和许多其他语言,因为它是GEOS C ++库的包装),这是事实上的标准。 你想要什么的例子: from shapely.geometry import Point, Polygon
p = Point(0.0, 0.0)
poly = Polygon([(1, 1), (-1, 1), (-1, -1), (1, -1)])
is_included = poly.contains(p)
is_included现在是True 。 Take a...
根据评论中的说明,您正在尝试使用matlab创建支持Alpha透明度的视频格式。 一般来说,单独使用matlab似乎是不可能的(至少在matlab 2013中是我使用的版本)。 如果您想检查最新的matlab是否支持具有Alpha透明度的视频,请键入doc videowriter并查看可用的格式。 如果您在那里看到任何带有透明度选项的内容,请从那里开始。 但我看到的最多的是24位RGB视频(即三个频道,没有透明度)。 所以matlab没有能力生成具有alpha透明度的原生.avi视频。 但请注意,...
你正在做的是从面具外面的vessel中提取所有东西。 由于没有圆形矩阵这样的东西,Matlab的解决方案是输出掩码内所有值的向量 。 虽然这在技术上是正确的,但该向量可能很难处理。 另一种解决方案是将数据矩阵保持为正方形,并将掩码外的所有内容设置为NaN : % make a copy
vessel_undermask = vessel;
% NaN everything outside the mask (in R, G and B layers)
vessel_underma...
这是一个方法: img = imread('test.jpg');
thr = graythresh(img);
thr_img = im2bw(img,thr);
triangle_count = sum(sum(thr_img < thr))
选择图像的阈值 基于此阈值对图像进行二值化 计算二值化图像中低于此阈值的像素数 在您的情况下,三角形中的像素数似乎在1605037左右。 这是thr_img的可视化 - 二值化图像: Here's a method: img = imread('tes...
相关文章
Some might also contend that inheritance should be
...
中文名: MATLAB及应用 作者: 胡鹤飞 图书分类: 软件 资源格式: PDF
...
中文名: MATLAB智能算法30个案例分析 作者: 史峰 王辉 郁磊 胡斐
...
中文名: 模式识别与智能计算:MATLAB技术实现(第2版) 作者: 杨淑莹 图书分类:
...
在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals,h
...
中文名: 数字图像处理与机器视觉:Visual C++与Matlab实现 作者: 张铮 图
...
System.out.println(new Student());我知道输出的是引用,引用不是内存地
...
Browse the filesystem Namenode Logs Cluste
...
最新问答
如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re
第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型
这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;
问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是
我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar
Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/
你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV
12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar
这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定