如何使用ImageMagick的convert工具获取图像的投影剖面
实现方案
方案1:直接调用ImageMagick内置算子生成(速度快,适合大尺寸图像)
你需要的投影剖面本质是图像行/列的像素值求和,可通过convert的缩放算子快速实现:
- 生成x方向(列)投影:每个值对应该x坐标列的所有像素值总和
# 先获取图像高度,用于计算准确的像素求和结果 img_height=$(convert pp.png -format "%h" info:) convert pp.png -colorspace Gray -scale 1x! -format "%[fx:int(p{0,%[t]} * $img_height)]\n" info:x_proj.txt
- 生成y方向(行)投影:每个值对应该y坐标行的所有像素值总和
# 先获取图像宽度,用于计算准确的像素求和结果 img_width=$(convert pp.png -format "%w" info:) convert pp.png -colorspace Gray -scale x1! -format "%[fx:int(p{%[t],0} * $img_width)]\n" info:y_proj.txt
如果是二值图像,输出结果直接就是对应行/列的白色像素计数;如果是灰度图像,结果就是对应行/列的灰度值总和,你可以根据需求自行做归一化处理。
方案2:转像素矩阵后自定义统计(逻辑透明,便于定制规则)
如果需要灵活调整统计逻辑(比如只统计大于某阈值的像素、做特殊加权求和等),可以先把图像导出为纯像素值文本再做统计:
- 导出像素值矩阵
convert pp.png -colorspace Gray -depth 8 txt: | tail -n +2 | awk '{gsub(/gray\(|\)/,"",$4); print $4}' > pixel_vals.txt
- 统计x方向投影
img_width=$(convert pp.png -format "%w" info:) awk -v w="$img_width" '{col = (NR-1) % w; sum[col] += $1} END {for(i=0;i<w;i++) print sum[i]}' pixel_vals.txt > x_proj.txt
- 统计y方向投影
img_width=$(convert pp.png -format "%w" info:) awk -v w="$img_width" '{row_sum += $1; if(NR % w == 0) {print row_sum; row_sum=0}}' pixel_vals.txt > y_proj.txt
内容的提问来源于stack exchange,提问作者mshaffer
相关产品推荐
相关产品推荐

