我使用Synthetic Aperture Radar卫星的非常大的数据集.这些可以被认为是一侧10k像素量级的高动态范围灰度图像.
最近,我一直在开发Lindeberg尺度空间脊检测算法的单尺度变体的应用,用于检测SAR图像中的线性特征.这是对使用方向滤波器或使用Hough变换的改进,这两种方法以前都使用过,因为它的计算成本低于其中任何一种.(我将在4月份的JURSE 2011上展示一些最新成果,如果有帮助,我可以上传预印本).
我目前使用的代码生成一个记录数组,每个像素一个,每个记录描述矩形到像素右下角的一个脊段,并由相邻的像素限定.
struct ridge_t { unsigned char top, left, bottom, right };
int rows, cols;
struct ridge_t *ridges; /* An array of rows*cols ridge entries */
Run Code Online (Sandbox Code Playgroud)
在一个条目ridges
包含脊段如果正好有两个的top
,left
,right
并bottom
具有范围值0 - 128.假设我有:
ridge_t entry;
entry.top = 25; entry.left = 255; entry.bottom = 255; entry.right = 76;
Run Code Online (Sandbox Code Playgroud)
然后我可以找到脊段的开始(x1,y1)和结束(x2,y2):
float x1, y1, x2, y2;
x1 = (float) col + (float) entry.top / 128.0;
y1 = (float) …
Run Code Online (Sandbox Code Playgroud) c scalability image-processing feature-detection satellite-image
我最近一直致力于一个需要存储和加载大量数据的系统,包括单精度浮点值.我决定对整数的网络字节顺序进行标准化,并决定以big-endian格式存储浮点值,即:
|-- Byte 0 --| |-- Byte 1 -| Byte 2 Byte 3
# ####### # ####### ######## ########
Sign Exponent Mantissa
1b 8b, MSB first 23b, MSB first
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想提供类似的功能htonl()
和ntohl()
,因为我已经使用这些用于擦拭整数,我也希望有尽可能多的平台独立性尽可能的方式来实现这一点(而假设float
类型对应于IEEE754 32位浮点值).有没有办法,可能使用ieee754.h
,这样做?
我有一个答案似乎有效,我将在下面发布,但它似乎非常缓慢和低效,我会感谢有关如何使其更快和/或更可靠的任何建议.
我使用卫星雷达,并提供了一个包含32 bpp灰度数据的(超大)TIFF文件.不幸的是,libtiff是用于处理TIFF文件的标准Linux库,它不支持SampleFormat TIFF文件,这意味着不支持高位深度灰度图像或浮点图像.
有谁知道FOSS C库为这些类型的图像提供支持?如果做不到这一点,任何人都可以提出一个适当的文件格式转换成的,自由和开放源码库,可以加载那个?(理想情况下,科学界应普遍接受数据交换,并得到IDL/ENVI的支持).
我在gschem上工作,这是一个用于编辑电子原理图的免费软件工具.最近我们使用包含GtkTextView的GtkScrolledWindow遇到了问题.
最新版本的Ubuntu使用覆盖滚动条,这意味着GtkScrolledWindows不再设置最小高度,为传统滚动条提供足够的空间(实际上,它们的最小高度为0).同样,没有显示文本的GtkTextView请求高度为0.这意味着gschem中的一个可滚动的GtkTextViews被显示为高度中的一个像素,这显然是不可用的.
在上面显示的屏幕截图右侧的对话框中,记下"值:"标签和"添加"按钮之间的不可见小部件.
一些用户已经独立报告了这一点 - 另请参阅错误报告.
显然,我们可以通过以下方式解决这个问题:
g_object_set (textview, "height-request", 100, NULL);
Run Code Online (Sandbox Code Playgroud)
然而,这非常不优雅,并且对于以像素设置非常大的字体大小的用户(例如,具有视力问题的用户或使用高DPI屏幕的用户)将会中断.
因此,理想情况下,我们希望将GtkTextView的最小大小设置为相对于默认字体大小,例如告诉它"显示至少三行文本".
有人能建议一个明智/优雅的方法吗?
我们有一个链接多个静态库的程序,这些静态库可能定义也可能不定义多个符号,具体取决于编译选项。在 OS X 上,我们使用dlsym(3)
NULL 句柄来获取符号地址。但是,在 Linux 上,dlsym(3)
始终返回 NULL。
考虑一个简单的程序(来源如下),该程序链接包含一个函数和一个变量的静态库,并尝试打印它们的地址。我们可以检查程序是否包含符号:
$ nm -C test | grep "test\(func\|var\)"
0000000000400715 T testFunc
0000000000601050 B testVar
Run Code Online (Sandbox Code Playgroud)
但是,当程序运行时,两者都找不到:
$ ./test
testVar: (nil)
testFunc: (nil)
Run Code Online (Sandbox Code Playgroud)
我们正在尝试在 Linux 上使用 glibc 实现的dlsym(3)
?
(抱歉有空格)
LDFLAGS=-L.
LDLIBS=-Wl,--whole-archive -ltest -Wl,--no-whole-archive -ldl
libtest.o: libtest.c libtest.h
libtest.a: libtest.o
test: test.o libtest.a
clean:
-rm -f test test.o libtest.o libtest.a
Run Code Online (Sandbox Code Playgroud)
#pragma once
extern void *testVar;
extern int testFunc(int);
Run Code Online (Sandbox Code Playgroud)
#include "libtest.h"
void *testVar;
int testFunc(int x) { …
Run Code Online (Sandbox Code Playgroud) 在 C 中,函数声明可以是原型声明或非原型声明。例如,考虑以下最小程序:
int foo (); /* non-prototype declaration */
int bar (void); /* prototype declaration */
int main (int argc, char **argv)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
尽管在 C99 中非原型声明已经过时,但我无法让 GCC 抱怨它们。例如,使用 GCC 编译上述程序并启用所有错误就会成功:
$ gcc -std=c99 -pedantic -Werror -Wall test.c
$
Run Code Online (Sandbox Code Playgroud)
有没有办法说服 GCC 对不是原型的函数声明发出警告?
(问题的灵感来自Keith Thompson的回答。)
c ×6
gcc ×2
c99 ×1
compilation ×1
dlsym ×1
endianness ×1
file-format ×1
gtk ×1
gtk2 ×1
ieee-754 ×1
linux ×1
portability ×1
scalability ×1
tiff ×1