- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的高对比度黑白视频图像,我需要在其中找到垂直边缘的 X 值和水平边缘的 Y 值。我还需要知道边缘的方向(白->黑或黑->白)。
会有:
我一直在阅读有关边缘检测算法的资料,但对它了解甚少,但我所了解的是它们都比我的要求复杂得多。它们都是为了从复杂的图像中生成简单边缘的图像而设计的。我的要求(我的图像)要简单得多,我只需要零到两个边缘的 X 和 Y 值。
如果我在图表上绘制一行像素(X=像素索引,Y=像素强度),我会得到一条线、一条上升斜率和另一条线。斜坡的中心点就是我需要的。但线条并不完美。它们很嘈杂,可能会有小的凸起或凹陷,或者如果看不到边缘,它可能(大部分)是平坦的。
那么是否有一种简单的算法可以平滑该图并生成“斜率”的方向和中心点?
最佳答案
我会直接从命令行使用 ImageMagick 来解决这个问题——它安装在大多数 Linux 发行版上,也适用于 OSX 和 Windows。
因此,首先,我会转到灰度并标准化对比度,这样您就不太容易受到曝光或光照变化的影响。然后我将阈值设置为 50%,以便所有像素都被强制为黑色或白色。
convert line.png -colorspace gray -normalize -threshold 50% result.png
然后我会运行一个又高又薄的中值滤波器(比如 100 像素高和 1 像素宽)来平滑垂直方向的图像(这样我就可以找到水平边缘)。
convert line.png -colorspace gray -normalize -threshold 50% -virtual-pixel mirror -statistic median 1x100 result.png
然后我会将图像调整为 1 像素宽和 100 像素高以减少输出量,因为我会说找到图像高度的 1% 以内的边缘就像你希望的那样嘈杂的图像。
convert line.png -colorspace gray -normalize -threshold 50% -virtual-pixel mirror -statistic median 1x100 -resize 1x100! txt:
# ImageMagick pixel enumeration: 1,100,255,srgb
0,0: (32496,32496,32496) #7E7E7E srgb(126,126,126)
0,1: (32969,32969,32969) #808080 srgb(128,128,128)
0,2: (33498,33498,33498) #828282 srgb(130,130,130)
0,3: (32632,32632,32632) #7F7F7F srgb(127,127,127)
0,4: (32708,32708,32708) #7F7F7F srgb(127,127,127)
0,5: (32787,32787,32787) #808080 srgb(128,128,128)
0,6: (32615,32615,32615) #7F7F7F srgb(127,127,127)
0,7: (33186,33186,33186) #818181 srgb(129,129,129)
0,8: (33786,33786,33786) #838383 srgb(131,131,131)
0,9: (33610,33610,33610) #838383 srgb(131,131,131)
0,10: (32577,32577,32577) #7F7F7F srgb(127,127,127)
0,11: (33159,33159,33159) #818181 srgb(129,129,129)
0,12: (33578,33578,33578) #838383 srgb(131,131,131)
0,13: (33276,33276,33276) #818181 srgb(129,129,129)
0,14: (33259,33259,33259) #818181 srgb(129,129,129)
0,15: (32620,32620,32620) #7F7F7F srgb(127,127,127)
0,16: (32624,32624,32624) #7F7F7F srgb(127,127,127)
0,17: (33131,33131,33131) #818181 srgb(129,129,129)
0,18: (33278,33278,33278) #818181 srgb(129,129,129)
0,19: (32680,32680,32680) #7F7F7F srgb(127,127,127)
0,20: (33136,33136,33136) #818181 srgb(129,129,129)
0,21: (32707,32707,32707) #7F7F7F srgb(127,127,127)
0,22: (33051,33051,33051) #818181 srgb(129,129,129)
0,23: (33794,33794,33794) #838383 srgb(131,131,131)
0,24: (33704,33704,33704) #838383 srgb(131,131,131)
0,25: (33028,33028,33028) #818181 srgb(129,129,129)
0,26: (33605,33605,33605) #838383 srgb(131,131,131)
0,27: (33785,33785,33785) #838383 srgb(131,131,131)
0,28: (33290,33290,33290) #828282 srgb(130,130,130)
0,29: (33079,33079,33079) #818181 srgb(129,129,129)
0,30: (33430,33430,33430) #828282 srgb(130,130,130)
0,31: (33246,33246,33246) #818181 srgb(129,129,129)
0,32: (33102,33102,33102) #818181 srgb(129,129,129)
0,33: (33248,33248,33248) #818181 srgb(129,129,129)
0,34: (33823,33823,33823) #848484 srgb(132,132,132)
0,35: (33678,33678,33678) #838383 srgb(131,131,131)
0,36: (33497,33497,33497) #828282 srgb(130,130,130)
0,37: (33960,33960,33960) #848484 srgb(132,132,132)
0,38: (33520,33520,33520) #828282 srgb(130,130,130)
0,39: (33235,33235,33235) #818181 srgb(129,129,129)
0,40: (32655,32655,32655) #7F7F7F srgb(127,127,127)
0,41: (32825,32825,32825) #808080 srgb(128,128,128)
0,42: (32847,32847,32847) #808080 srgb(128,128,128)
0,43: (33214,33214,33214) #818181 srgb(129,129,129)
0,44: (32966,32966,32966) #808080 srgb(128,128,128)
0,45: (33262,33262,33262) #818181 srgb(129,129,129)
0,46: (33178,33178,33178) #818181 srgb(129,129,129)
0,47: (32501,32501,32501) #7E7E7E srgb(126,126,126)
0,48: (32499,32499,32499) #7E7E7E srgb(126,126,126)
0,49: (31982,31982,31982) #7C7C7C srgb(124,124,124)
0,50: (32564,32564,32564) #7F7F7F srgb(127,127,127)
0,51: (32336,32336,32336) #7E7E7E srgb(126,126,126)
0,52: (30311,30311,30311) #767676 srgb(118,118,118)
0,53: (27119,27119,27119) #6A6A6A srgb(106,106,106)
0,54: (13002,13002,13002) #333333 srgb(51,51,51)
0,55: (1855,1855,1855) #070707 srgb(7,7,7)
0,56: (187,187,187) #010101 srgb(1,1,1) <--- This is your edge at 56% of the image height down from the top
0,57: (72,72,72) #000000 srgb(0,0,0)
0,58: (0,0,0) #000000 black
0,59: (0,0,0) #000000 black
0,60: (0,0,0) #000000 black
0,61: (0,0,0) #000000 black
0,62: (0,0,0) #000000 black
0,63: (0,0,0) #000000 black
0,64: (0,0,0) #000000 black
0,65: (0,0,0) #000000 black
0,66: (0,0,0) #000000 black
0,67: (0,0,0) #000000 black
0,68: (0,0,0) #000000 black
0,69: (0,0,0) #000000 black
0,70: (0,0,0) #000000 black
0,71: (0,0,0) #000000 black
0,72: (0,0,0) #000000 black
0,73: (0,0,0) #000000 black
0,74: (0,0,0) #000000 black
0,75: (0,0,0) #000000 black
0,76: (0,0,0) #000000 black
0,77: (0,0,0) #000000 black
0,78: (0,0,0) #000000 black
0,79: (0,0,0) #000000 black
0,80: (0,0,0) #000000 black
0,81: (0,0,0) #000000 black
0,82: (0,0,0) #000000 black
0,83: (0,0,0) #000000 black
0,84: (0,0,0) #000000 black
0,85: (0,0,0) #000000 black
0,86: (0,0,0) #000000 black
0,87: (0,0,0) #000000 black
0,88: (0,0,0) #000000 black
0,89: (0,0,0) #000000 black
0,90: (0,0,0) #000000 black
0,91: (0,0,0) #000000 black
0,92: (0,0,0) #000000 black
0,93: (0,0,0) #000000 black
0,94: (0,0,0) #000000 black
0,95: (0,0,0) #000000 black
0,96: (0,0,0) #000000 black
0,97: (0,0,0) #000000 black
0,98: (0,0,0) #000000 black
0,99: (0,0,0) #000000 black
同样对于你的垂直边缘......
convert line.png -colorspace gray -normalize -threshold 50% -virtual-pixel mirror -statistic median 100x1 -resize 100x1! txt:
# ImageMagick pixel enumeration: 100,1,255,srgb
0,0: (0,0,0) #000000 black
1,0: (0,0,0) #000000 black
2,0: (0,0,0) #000000 black
3,0: (0,0,0) #000000 black
4,0: (0,0,0) #000000 black
5,0: (0,0,0) #000000 black
6,0: (0,0,0) #000000 black
7,0: (0,0,0) #000000 black
8,0: (0,0,0) #000000 black
9,0: (0,0,0) #000000 black
10,0: (0,0,0) #000000 black
11,0: (0,0,0) #000000 black
12,0: (0,0,0) #000000 black
13,0: (0,0,0) #000000 black
14,0: (0,0,0) #000000 black
15,0: (0,0,0) #000000 black
16,0: (0,0,0) #000000 black
17,0: (0,0,0) #000000 black
18,0: (0,0,0) #000000 black
19,0: (0,0,0) #000000 black
20,0: (0,0,0) #000000 black
21,0: (0,0,0) #000000 black
22,0: (0,0,0) #000000 black
23,0: (0,0,0) #000000 black
24,0: (0,0,0) #000000 black
25,0: (0,0,0) #000000 black
26,0: (0,0,0) #000000 black
27,0: (0,0,0) #000000 black
28,0: (0,0,0) #000000 black
29,0: (0,0,0) #000000 black
30,0: (0,0,0) #000000 black
31,0: (0,0,0) #000000 black
32,0: (0,0,0) #000000 black
33,0: (0,0,0) #000000 black
34,0: (0,0,0) #000000 black
35,0: (0,0,0) #000000 black
36,0: (0,0,0) #000000 black
37,0: (0,0,0) #000000 black
38,0: (0,0,0) #000000 black
39,0: (0,0,0) #000000 black
40,0: (0,0,0) #000000 black
41,0: (0,0,0) #000000 black
42,0: (0,0,0) #000000 black
43,0: (0,0,0) #000000 black
44,0: (0,0,0) #000000 black
45,0: (7,7,7) #000000 srgb(0,0,0)
46,0: (87,87,87) #000000 srgb(0,0,0)
47,0: (342,342,342) #010101 srgb(1,1,1)
48,0: (3623,3623,3623) #0E0E0E srgb(14,14,14)
49,0: (16943,16943,16943) #424242 srgb(66,66,66) <-- This is your vertical edge, 49% of the image width across from the left side
50,0: (29779,29779,29779) #747474 srgb(116,116,116)
51,0: (33852,33852,33852) #848484 srgb(132,132,132)
52,0: (34745,34745,34745) #878787 srgb(135,135,135)
53,0: (35643,35643,35643) #8B8B8B srgb(139,139,139)
54,0: (35893,35893,35893) #8C8C8C srgb(140,140,140)
55,0: (35932,35932,35932) #8C8C8C srgb(140,140,140)
56,0: (35934,35934,35934) #8C8C8C srgb(140,140,140)
57,0: (36041,36041,36041) #8C8C8C srgb(140,140,140)
58,0: (36095,36095,36095) #8C8C8C srgb(140,140,140)
59,0: (35975,35975,35975) #8C8C8C srgb(140,140,140)
60,0: (35937,35937,35937) #8C8C8C srgb(140,140,140)
61,0: (35937,35937,35937) #8C8C8C srgb(140,140,140)
62,0: (36042,36042,36042) #8C8C8C srgb(140,140,140)
63,0: (36094,36094,36094) #8C8C8C srgb(140,140,140)
64,0: (36148,36148,36148) #8D8D8D srgb(141,141,141)
65,0: (36409,36409,36409) #8E8E8E srgb(142,142,142)
66,0: (36409,36409,36409) #8E8E8E srgb(142,142,142)
67,0: (36375,36375,36375) #8E8E8E srgb(142,142,142)
68,0: (36252,36252,36252) #8D8D8D srgb(141,141,141)
69,0: (36214,36214,36214) #8D8D8D srgb(141,141,141)
70,0: (36176,36176,36176) #8D8D8D srgb(141,141,141)
71,0: (36274,36274,36274) #8D8D8D srgb(141,141,141)
72,0: (36406,36406,36406) #8E8E8E srgb(142,142,142)
73,0: (36366,36366,36366) #8E8E8E srgb(142,142,142)
74,0: (36128,36128,36128) #8D8D8D srgb(141,141,141)
75,0: (36004,36004,36004) #8C8C8C srgb(140,140,140)
76,0: (35900,35900,35900) #8C8C8C srgb(140,140,140)
77,0: (35872,35872,35872) #8C8C8C srgb(140,140,140)
78,0: (35855,35855,35855) #8C8C8C srgb(140,140,140)
79,0: (35779,35779,35779) #8B8B8B srgb(139,139,139)
80,0: (35777,35777,35777) #8B8B8B srgb(139,139,139)
81,0: (35664,35664,35664) #8B8B8B srgb(139,139,139)
82,0: (35774,35774,35774) #8B8B8B srgb(139,139,139)
83,0: (35785,35785,35785) #8B8B8B srgb(139,139,139)
84,0: (35753,35753,35753) #8B8B8B srgb(139,139,139)
85,0: (35671,35671,35671) #8B8B8B srgb(139,139,139)
86,0: (35675,35675,35675) #8B8B8B srgb(139,139,139)
87,0: (35694,35694,35694) #8B8B8B srgb(139,139,139)
88,0: (35621,35621,35621) #8B8B8B srgb(139,139,139)
89,0: (35819,35819,35819) #8B8B8B srgb(139,139,139)
90,0: (36080,36080,36080) #8C8C8C srgb(140,140,140)
91,0: (36300,36300,36300) #8D8D8D srgb(141,141,141)
92,0: (36550,36550,36550) #8E8E8E srgb(142,142,142)
93,0: (36561,36561,36561) #8E8E8E srgb(142,142,142)
94,0: (36425,36425,36425) #8E8E8E srgb(142,142,142)
95,0: (36268,36268,36268) #8D8D8D srgb(141,141,141)
96,0: (36317,36317,36317) #8D8D8D srgb(141,141,141)
97,0: (36409,36409,36409) #8E8E8E srgb(142,142,142)
98,0: (36521,36521,36521) #8E8E8E srgb(142,142,142)
99,0: (36568,36568,36568) #8E8E8E srgb(142,142,142)
这是垂直边缘的中值滤波图像:
而且,我可以像这样用红色绘制检测到的边缘:
convert line.png -stroke red -draw "line 0,268 640,268" -draw "line 313,0 313,480" result.png
因此,总而言之,您将在终端中运行的两个命令如下所示,无需编写或编译和链接任何代码:
# Find horizontal edges
convert line.png -colorspace gray -normalize -threshold 50% -virtual-pixel mirror -statistic median 1x100 -resize 1x100! txt:
# Find vertical edges
convert line.png -colorspace gray -normalize -threshold 50% -virtual-pixel mirror -statistic median 100x1 -resize 100x1! txt:
关于image-processing - 非常简单的边缘检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816158/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 5年前关闭。 Improve t
我是一名设计老师,试图帮助学生应对编程挑战,所以我编码是为了好玩,但我不是专家。 她需要找到 mode (最常见的值)在使用耦合到 Arduino 的传感器的数据构建的数据集中,然后根据结果激活一些功
我正在开发一个应用程序,该应用程序提供 CPU 使用率最高的 5 个应用程序名称。目前,我通过以下代码获得了排名前 5 的应用程序: var _ = require('lodash');
互联网上很少有例子涉及这个问题的所有三个问题——即 set-process-sentinel ; set-process-filter ;和 start-process . 我尝试了几种不同的方法来微
如 this post 中所述,在 C# 中有两种调用另一个进程的方法。 Process.Start("hello"); 和 Process p = new Process(); p.StartInf
我试图让我的桨从白色变为渐变(线性),并使球具有径向渐变。感谢您的帮助!您可以在 void drawPaddle 中找到桨的代码。 这是我的目标: 这是我的代码: //球 int ballX = 50
考虑:流程(a)根据我的文字: A process is first entered at the time of simulation, at which time it is executed u
我真的希望 Processing 有用于处理数组的 push 和 pop 方法,但由于它没有,我不得不试图找出删除数组中特定位置的对象的最佳方法。我相信这对很多人来说都是基本的,但我可以使用一些帮助,
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
以编程方式,我如何确定 Windows 10 中的 3 个类别 应用 后台进程 Windows 服务 就像任务管理器一样? 即我需要一些 C# 代码,我可以确定应用程序列表与后台进程列表。检查 Win
当我导入 node:process它工作正常。但是,当我尝试要求相同时,它会出错。 这工作正常: import process from 'node:process'; 但是当我尝试要求相同时,它会引
我正在上一门使用处理的类(class)。 我在理解 map() 函数时遇到问题。 根据它的文档( http://www.processing.org/reference/map_.html ): Re
我试图执行: composer.phar update 并收到: Fatal error: Allowed memory size of 94371840 bytes exhausted (tried
给定一堆二维图像,如何使用 Processing/Processing.js 产生体积渲染效果? 目前我的想法是使用 java(类似于 imageJ)进行体积渲染 -> 获取体积渲染图像的面作为单独的
这是代码示例 var startInfo = new ProcessStartInfo { Arguments = commandStr, FileName = @"C:\Window
当我在 Processing(草图 > 导入库 > 添加库)中添加库时,它安装在哪里? 最佳答案 它们安装在您的 中速写本位置 . 您可以通过转到"file">“首选项”来查看和更改您的速写本位置。草
无聊的好奇... 我正在查看当前进程的一些属性: using(Process p = Process.GetCurrentProcess()) { // Inspect properties
我正在尝试在同一页面上运行多个草图。 初始化脚本指定: /* * This code searches for all the * in your page and loads each scrip
Process.Kill 后是否需要使用 Process.WaitForExit? 如果调用进程在调用 Process.Kill 后立即退出怎么办? 这会导致 Process.Kill 失败吗? 编辑
我尝试使用处理从麦克风获取频率。我混合了文档中的两个示例,但“最高”并不是真正的赫兹(a 是 440 赫兹)。 你知道如何拥有比这更好的东西吗? import ddf.minim.*; import
我是一名优秀的程序员,十分优秀!