我找不到更好的标题。 所以这就是我想要做的:
我有一个28x28像素的图片框
我正在从事一个AI项目,我的想法是为数字制作OCR,
我找到了训练数据,但所有图像均为28x28像素, 所以我的想法是制作一个这样大小的图片框,
在其上绘制并将该信息提供给神经网络。
我的问题目前在图形上:
如何制作28x28图片框并以某种方式放大它,但保持像素数。 我将图片框放入面板中,并且希望图片框填充面板。
我的想法是以某种方式将其放大,然后再将其按比例缩小,但是我该怎么做呢?
在数学上该怎么做?
在该图片框(线条,fillelipse等)上绘制的最佳方法是什么,以便可以将数据输入到NN中(在对c进行规范化之后)。
答案 0 :(得分:0)
我想出了一个解决方案,也许它将在将来对某人有所帮助:
List<KeyValuePair<int, int>> coordonateList = new List<KeyValuePair<int, int>>();
// drawPictureBox size is 280 x 280 (28 * 10, 28 * 10)
private void pbImage_MouseDown(object sender, MouseEventArgs e)
{
mouseDown = true;
}
private void drawPictureBox_MouseMove(object sender, MouseEventArgs e)
{
if (mouseDown)
{
Point point = drawPictureBox.PointToClient(Cursor.Position);
DrawPoint((point.X), (point.Y));
}
}
private void drawPictureBox_MouseUp(object sender, MouseEventArgs e)
{
mouseDown = false;
}
public void DrawPoint(int x, int y)
{
using (Graphics g = Graphics.FromImage(bitmap))
{
SolidBrush brush = new SolidBrush(Color.White);
g.FillRectangle(brush, x, y, 10, 10);
coordonateList.Add(new KeyValuePair<int,int>(x/10,y/10));
}
drawPictureBox.Image = bitmap;
}
private void zoomImage(Bitmap bitmap)
{
var result = new Bitmap(28,28);
using (Graphics g1 = Graphics.FromImage(result))
{
SolidBrush brush = new SolidBrush(Color.White);
foreach (var item in coordonateList)
{
g1.FillRectangle(brush, item.Key, item.Value, 1, 1);
}
pictureBox1.Image = result;
}