Image processing 形态击中未击中变换
我正在使用OpenCV进行图像处理算法,并试图修复字符中不规则的边缘。我读到形态学击中未击中变换是一个很好的解决方案。这有没有开源的实现 或者有没有其他算法可以用来修复不规则的边缘Image processing 形态击中未击中变换,image-processing,opencv,Image Processing,Opencv,我正在使用OpenCV进行图像处理算法,并试图修复字符中不规则的边缘。我读到形态学击中未击中变换是一个很好的解决方案。这有没有开源的实现 或者有没有其他算法可以用来修复不规则的边缘 可以找到一个简单的命中和未命中实现: #包括 //命中或未命中变换函数 void hitmiss(cv::Mat&src,//源映像,8位单通道矩阵 cv::Mat&dst,//目标映像 cv::Mat&kernel)//内核。1=前景,-1=背景,0=不在乎 { CV_断言(src.type()=CV_8U&&sr
可以找到一个简单的命中和未命中实现:
#包括
//命中或未命中变换函数
void hitmiss(cv::Mat&src,//源映像,8位单通道矩阵
cv::Mat&dst,//目标映像
cv::Mat&kernel)//内核。1=前景,-1=背景,0=不在乎
{
CV_断言(src.type()=CV_8U&&src.channels()=1);
cv::Mat k1=(内核==1)/255;
cv::Mat k2=(内核==-1)/255;
cv::normalize(src,src,0,1,cv::NORM\u MINMAX);
cv::Mat e1,e2;
cv::侵蚀(src、e1、k1);
侵蚀(1-src,e2,k2);
dst=e1和e2;
}
但我认为只有通过膨胀才能解决这个问题,如中的例子(摘自Gonzales等人的“数字图像处理”一书)结合形态膨胀和侵蚀,得出以下结果: 源代码:
package characterRestoration;
import marvin.image.MarvinColorModelConverter;
import marvin.image.MarvinImage;
import marvin.io.MarvinImageIO;
import marvin.plugin.MarvinImagePlugin;
import marvin.util.MarvinPluginLoader;
public class CharacterRestoration {
MarvinImage image = MarvinImageIO.loadImage("./res/character_in.png");
private MarvinImagePlugin dilation = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.dilation");
private MarvinImagePlugin erosion = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion");
private boolean[][] matrixD = new boolean[][]{
{false,false,false,false,false,false,false,false,false},
{false,false,false,false,false,false,false,false,false},
{false,false,false,false,false,false,false,false,false},
{false,false,true,true,true,true,true,true,true},
{false,false,true,true,true,true,true,true,true},
{false,false,true,true,true,true,true,true,true},
{false,false,false,false,false,false,false,false,false},
{false,false,false,false,false,false,false,false,false},
};
private boolean[][] matrixE = new boolean[][]{
{true,true,true},
{true,true,true},
{true,true,true}
};
public CharacterRestoration(){
// Convert image to binary format
image = MarvinColorModelConverter.rgbToBinary(image, 125);
// Morphological Dilation
dilation.setAttribute("matrix", matrixD);
dilation.process(image.clone(), image);
// Morphological Erosion
erosion.setAttribute("matrix", matrixE);
erosion.process(image.clone(), image);
MarvinImageIO.saveImage(image, "./res/character_out.png");
}
public static void main(String[] args) {
new CharacterRestoration();
}
}你在哪里读过?我认为打不中本身是不够的,你需要用一些从它派生出来的形态学运算。看见
package characterRestoration;
import marvin.image.MarvinColorModelConverter;
import marvin.image.MarvinImage;
import marvin.io.MarvinImageIO;
import marvin.plugin.MarvinImagePlugin;
import marvin.util.MarvinPluginLoader;
public class CharacterRestoration {
MarvinImage image = MarvinImageIO.loadImage("./res/character_in.png");
private MarvinImagePlugin dilation = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.dilation");
private MarvinImagePlugin erosion = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion");
private boolean[][] matrixD = new boolean[][]{
{false,false,false,false,false,false,false,false,false},
{false,false,false,false,false,false,false,false,false},
{false,false,false,false,false,false,false,false,false},
{false,false,true,true,true,true,true,true,true},
{false,false,true,true,true,true,true,true,true},
{false,false,true,true,true,true,true,true,true},
{false,false,false,false,false,false,false,false,false},
{false,false,false,false,false,false,false,false,false},
};
private boolean[][] matrixE = new boolean[][]{
{true,true,true},
{true,true,true},
{true,true,true}
};
public CharacterRestoration(){
// Convert image to binary format
image = MarvinColorModelConverter.rgbToBinary(image, 125);
// Morphological Dilation
dilation.setAttribute("matrix", matrixD);
dilation.process(image.clone(), image);
// Morphological Erosion
erosion.setAttribute("matrix", matrixE);
erosion.process(image.clone(), image);
MarvinImageIO.saveImage(image, "./res/character_out.png");
}
public static void main(String[] args) {
new CharacterRestoration();
}